protected object /*!*/ DefineSingleton(Action <RubyModule> instanceTrait, Action <RubyModule> classTrait, Action <RubyModule> constantsInitializer, params RubyModule /*!*/[] /*!*/ mixins) { Assert.NotNullItems(mixins); Debug.Assert(_context.ObjectClass != null); RubyModule[] expandedMixins; using (_context.ClassHierarchyLocker()) { expandedMixins = RubyModule.ExpandMixinsNoLock(_context.ObjectClass, mixins); } object result = new RubyObject(_context.ObjectClass); _context.GetOrCreateInstanceSingleton(result, instanceTrait, classTrait, constantsInitializer, expandedMixins); return(result); }