从泛型方法中访问 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;
}
}
我正在尝试拥有一些工具箱,该工具箱中的每个工具在功能上都大不相同。因此,每个工具都需要在开始时创建和传递自己的配置,或者当您需要更改参数时,而基础 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;
}
}