【发布时间】:2014-03-21 21:00:56
【问题描述】:
我有一个关于 C# 泛型的问题。我希望在我的抽象类中存储一个泛型类型变量,而不在类之外声明该类型。
以下是代码示例。请注意,我不希望将 Param 类暴露在 Calc 类之外。
提前致谢。 - 杜塔。
abstract class Base { }
abstract class Calc<T> where T : Base
{
protected Param Member; /* how can this be a made a generic declaration
* WITHOUT declaring this class like,
* class Calc<T, P>
* where T : Base
* where P : Param */
protected Calc(Param p)
{
this.Member = p;
}
protected abstract class Param { }
}
class MyBase : Base { }
class MyCalc : Calc<MyBase>
{
public MyCalc() : base(new MyParam()) { }
public void doSomething()
{
base.Member.A++; // fails on compilation
}
private class MyParam : Calc<MyBase>.Param
{
public int A;
public MyParam() { this.A = 0; }
}
}
【问题讨论】:
-
你为什么想要一个受保护的类?你想完成/预防什么?什么不工作?你有什么看起来不错
-
我需要一个受保护的 Param 类,因为我只希望从 Calc 派生的类能够实例化和调用它的方法。
-
这与说您不希望
Param泛型类型参数为“public”不同。 -
是的,我不想公开。
-
我的回答对你有用吗?如果是这样,请将其标记为这样。如果没有,请告诉我们原因。谢谢!
标签: c# class generics abstract protected