从泛型方法内部访问公共成员



我试图有一个工具箱,每个工具箱中的工具在功能上是完全不同的。因此,每个工具都需要在开始时创建和传递自己的配置,或者当您需要更改参数时,而基类只是所有工具的共同之处的一般大纲,但是当试图从通用方法访问一些配置的公共成员时,我遇到了一个错误。像这样:

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不是一个类。您可以输入任何名称并编译:

public override void Setup<WhatEver>(WhatEver setupParams)

但是WhatEver是你在这里定义的类型。它不存在

你可以这样定义类:

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;
}
}

最新更新