IronRuby.Builtins.RubyModule.GetOrCreateSingletonClass C# (CSharp) Метод

GetOrCreateSingletonClass() публичный Метод

public GetOrCreateSingletonClass ( ) : RubyClass
Результат RubyClass
        public RubyClass/*!*/ GetOrCreateSingletonClass() {
            if (IsDummySingletonClass) {
                throw new InvalidOperationException("Dummy singleton class has no singleton class");
            }

            RubyClass immediate = _immediateClass;
            RubyClass singletonSuper;
            RubyClass singletonImmediate;

            if (!immediate.IsSingletonClass) {
                // finish module singleton initialization:
                Debug.Assert(!IsClass);
                singletonSuper = immediate;
                singletonImmediate = immediate.GetDummySingletonClass();
            } else if (immediate.IsDummySingletonClass) {
                // expanding singleton chain:
                singletonSuper = immediate.SuperClass;
                singletonImmediate = immediate;
            } else {
                return immediate;
            }

            var singleton = CreateSingletonClass(singletonSuper, null);
            singleton.InitializeImmediateClass(singletonImmediate);
            Interlocked.CompareExchange(ref _immediateClass, singleton, immediate);

            Debug.Assert(_immediateClass.IsSingletonClass && !_immediateClass.IsDummySingletonClass);
            return _immediateClass;
        }

Usage Example

Пример #1
0
 public static object Included(RubyContext/*!*/ context, RubyModule/*!*/ self, RubyModule/*!*/ includedIn) {
     var singleton = includedIn.GetOrCreateSingletonClass();
     singleton.AddMethod(
         context,
         "induced_from",
         new RubyLibraryMethodInfo(
             new[] { LibraryOverload.Create(new Func<RubyModule, object, object>(InducedFrom), false, 0, 0) }, 
             RubyMethodVisibility.Public, 
             singleton
         )
     );
     return self;
 }
All Usage Examples Of IronRuby.Builtins.RubyModule::GetOrCreateSingletonClass
RubyModule