【发布时间】:2011-08-18 22:20:39
【问题描述】:
我一直在尝试这个,但我似乎无法弄清楚这一点。我想做这个……
public abstract class SingletonType<TSingleton, TBaseClass> : TBaseClass
where TSingleton : TBaseClass, new()
where TBaseClass : class
{
static TSingleton _singleton;
public static TSingleton Singleton
=> _singleton ?? (_singleton = new TSingleton());
}
计划是像这样使用它,将单例模式“包装”在基类周围...
public class SingletonFoo : SingletonType<SingletonFoo, Foo> {
}
但是,我不断收到这个
不能从 'TBaseClass' 派生,因为它是一个类型参数
嗯...我认为类型正是您所做的派生的!
那么我错过了什么?
注意:这当然是一个简单的例子,因为它没有添加任何有用的东西,但假设 SingletonType 有很多与问题无关的其他逻辑,因此它被省略了专注于手头的问题。
【问题讨论】:
-
你说,“嗯......我认为类型正是你所衍生的!” — 是的,但请再次阅读消息。它说“类型参数”,不是“类型”。这是不同的。
-
然而,您可以在使用类型的泛型中的任何地方使用该“类型参数”(例如“公共静态 T”),那么如何以我想要的方式使用它与使用它作为返回不同类型? (到目前为止,@Tejs 似乎最有洞察力。)
-
可能值得注意的是,与继承相反,组合在这里更为理想。
-
@Mohamed Nuur,想详细说明一下吗? (......或者任何人都可以?)不知道你的意思。
标签: c# generics inheritance subclass derived-class