从泛型方法中访问 public 成员

Accessing a public member from within a generic method

我正在尝试拥有一些工具箱,该工具箱中的每个工具在功能上都大不相同。因此,每个工具都需要在开始时创建和传递自己的配置,或者当您需要更改参数时,而基础 class 只是所有工具共同点的大纲,但我尝试从通用方法访问某些配置的 public 成员时出错。我有这样的东西:

public abstract class Tool
{
    public abstract void Setup<T>(T setupParams);
}

public class SomeTool : Tool
{
    public class SomeConfig
    {
        public int counter;
        public float size;
        public SomeConfig(int _counter, float _size)
        {
            counter = _counter;
            size = _size;
        }
    }

    int m_counter;
    int m_size;

    public override void Setup<SomeConfig>(SomeConfig setupParams)
    {
        m_counter = setupParams.counter;
        //'SomeConfig' does not contain a definition for 'counter' and no accessible extension
        // method 'counter' accepting a first argument of type 'SomeConfig' could be found
        // (are you missing a using directive or an assembly reference?)
    }
}

有一个构造函数或非通用设置函数可以工作,但为什么我在这里做的事情会出错?

当你这样做时:

public abstract void Setup<T>(T setupParams)

您正在使用 <T> 来定义类型。该类型不存在。 T 不是 class。你可以输入任何名称并编译:

public override void Setup<WhatEver>(WhatEver setupParams)

但是 WhatEver 是您在那里定义的类型。它不存在。

您可以这样定义 class:

public abstract class Tool<T>
{
    public abstract void Setup(T setupParams);
}

public class SomeConfig
{
    public int counter;
    public float size;
    public SomeConfig(int _counter, float _size)
    {
        counter = _counter;
        size = _size;
    }
}

public class SomeTool : Tool<SomeConfig>
{

    int m_counter;
    int m_size;

    public override void Setup(SomeConfig setupParams)
    {
        m_counter = setupParams.counter;
    }
}