c# - 在派生类中设置泛型类型属性

标签 c# generics

我有一个通用类型 G<T> where T : A , 其中A是一个抽象类。每节课B源自 A我想要一个类型为 G<B> 的字段,无需编写重复代码,但我不确定是否有可能。一种方法是

abstract class A
{
    protected object g;

    protected abstract void SetG();

    public A()
    {
        SetG();
    }
}

class B : A
{
    protected override void SetG()
    {
        this.g = new G<B>();
    }

    public B() : base() {}
}

但这意味着在每个派生类中都有很多重复代码。有更好的方法吗?

最佳答案

你可以在两者之间添加一个额外的抽象类:

public abstract class A<T> : A where T : A
{
    protected override void SetG()
    {
        this.g = new G<T>();
    }
}

...然后,将您的 B 声明更新为:

public class B : A<B>
{
    public B() : base() { }
}

关于c# - 在派生类中设置泛型类型属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37845314/

相关文章:

java - 转换为 Type in java

java - java 中的函数式编程和有用的编译器错误

java - 扩展通用类的原始类型警告

java - 关于在 Java 中创建通用列表数组的错误

java - 这个 Java 语法(看起来方法是参数化的)是什么意思?

c# - PowerBI Embedded - 无法删除数据集

c# - String.Replace .NET Framework 的内存效率和性能

c# - 如何为自定义窗口模板添加 'Maximize window height only' 功能

c# - Windbg .load 扩展需要路径中的转义反斜杠 (\) 字符

c# - 我可以使用 C# 连接到 Java API 吗?