gpt4 book ai didi

c# - protected 通用类 - 是否受支持?

转载 作者:太空宇宙 更新时间:2023-11-03 13:27:25 26 4
gpt4 key购买 nike

我有一个关于 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; }
}
}

最佳答案

你只需要将它转换为新的类型,因为无论如何,变量 Member 被声明为 Param 并且它总是被作为 Param 访问:

((MyParam)base.Member).A++; 

其次,您可以通过更改以下内容来修复您的 MyParam 类:

MyParam : Calc<MyBase>.Param

对此:

MyParam : Param

因为Param已经是Calc<MyBase>通过泛型和继承。

关于c# - protected 通用类 - 是否受支持?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21915931/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com