Here是一个高度支持的解决方案,可以轻松地将嵌套类的构造函数仅限制为父类。我试图实现这一点,但要在包含嵌套泛型类的父类的上下文中。为了清楚起见,这是原始代码段:public class Journal{ private static Func<object, JournalEntry> _newJournalEntry; public class JournalEntry { static JournalEntry() { _newJournalEntry = value => new JournalEntry(value); } private JournalEntry(object value) { ...这是我目前的位置(为简单起见,我用简单的Func<object,JournalEntry>替换了Func<JournalEntry>。)public class Journal{ private static Func<JournalEntry> _new; public JournalEntry<T> NewJournalEntry<T>() { return (JournalEntry<T>)_new(); } public Journal(){} public class JournalEntry {} public class JournalEntry<T>:JournalEntry { static JournalEntry() { _new = () => new JournalEntry<T>(); } private JournalEntry() { } }}这是用例:Journal j = new Journal();Journal.JournalEntry<string> stringEntry = j.NewJournalEntry<string>();//Fails with null reference exception根据原始摘要中的此评论,  System.Runtime.CompilerServices.RuntimeHelpers.RunClassConst‌​ructor可以节省一天的时间。 :)我试了一下:Journal j = new Journal();System.Runtime.CompilerServices.RuntimeHelpers.RunClassConstructor(typeof(Journal.JournalEntry<string>).TypeHandle);Journal.JournalEntry<string> stringEntry = j.NewJournalEntry<string>();//Passes上面的代码有效。以下作品:Journal j = new Journal();System.Runtime.CompilerServices.RuntimeHelpers.RunClassConstructor(typeof(Journal.JournalEntry<string>).TypeHandle);Journal.JournalEntry<string> stringEntry = j.NewJournalEntry<string>();System.Runtime.CompilerServices.RuntimeHelpers.RunClassConstructor(typeof(Journal.JournalEntry<int>).TypeHandle);Journal.JournalEntry<int> intEntry = j.NewJournalEntry<int>();但是尝试要求另一个JournalEntry<string>失败,并且:  其他信息:无法将类型JournalEntry [System.Int32]的对象强制转换为类型JournalEntry [System.String]。我该如何解决这个难题,使我可以制作任何类型的JournalEntry<>任意数量的实例? 最佳答案 您的方法行不通,因为每次JournalEntry<T>的类型初始值设定项将运行(并且对于每个T运行一次),它将覆盖_new的先前值,从而破坏了其他 s。相反,您可以执行以下操作:public class Journal{ public JournalEntry<T> NewJournalEntry<T>() { System.Runtime.CompilerServices.RuntimeHelpers.RunClassConstructor(typeof(JournalEntry<T>).TypeHandle); return JournalEntryFactory<T>._new(); } private static class JournalEntryFactory<T> { public static Func<JournalEntry<T>> _new; } public Journal() { } public class JournalEntry { } public class JournalEntry<T> : JournalEntry { static JournalEntry() { JournalEntryFactory<T>._new = () => new JournalEntry<T>(); } private JournalEntry() { } }}这样,每个T都有一个单独的_new。顺便说一句,我是问你提到的问题的人。就其价值而言,我认为这种方法有点骇人听闻且容易出错。如果可能,我强烈建议您像accepted answer中那样使用基于接口的方法。这是您情况下的样子:public interface IJournalEntry<T>{}public class Journal{ public IJournalEntry<T> NewJournalEntry<T>() { return new JournalEntry<T>(); } public Journal() { } private class JournalEntry<T> : IJournalEntry<T> { public JournalEntry() { } }}关于c# - 这个嵌套的类构造函数片段可以应用于泛型类吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42754952/
10-09 20:36