public class Base<T>
{
T _data;
public partial struct Data
{
public T _data;
}
}
public class Custom : Base<int>
{
public partial struct Data
{
public float _bla;
public bool _bla2;
}
public void BlaBla()
{
Data data = new Data();
//int data = data._data; <= NOT FOUND
float bla = data._bla;
bool bla2 = data._bla2;
}
}
如上所述,Data类在父类和子类中定义了两次。
此外,Custom还根据需要定义了其他成员变量。
但是,无法访问Base中的Data._data。
... 为什么会这样?
答案 0 :(得分:4)
部分类只是msil中的语法糖,没有部分类。在这种情况下,您将创建2个不同的类。您没有Data
类型,类型为Custom.Data
和Base<T>.Data
。
Console.WriteLine(typeof(Custom.Data));
Console.WriteLine(typeof(Base<string>.Data));
答案 1 :(得分:3)
Data类在父类和子类
中定义了两次
完全。您有两种不同的类型,其名称以Data
结尾,但它们没有任何关系。
来自C#规范:
部分类型声明的每个部分都必须包含部分修饰符。它必须具有相同的名称,并在与其他部分相同的命名空间或类型声明中声明为。
因为它们以不同的类型嵌套,所以它们本身就是不同的类型。 partial
修饰符在这方面没有任何作用;它们只是由一部分组成的部分类型。
答案 2 :(得分:2)
请参阅@CodeCaster和@Max Mokrousov的其他答案。
这是一种通过从基础Data类继承而获得所需结果的方法:
public class Base<T>
{
T _data;
public class Data // Note that it's a class now instead of a struct
{
public T _data;
}
}
public class Custom : Base<int>
{
public class DataCustom : Base<int>.Data
{
public float _bla;
public bool _bla2;
}
public void BlaBla()
{
DataCustom data = new DataCustom();
int dataBase = data._data; // now works
float bla = data._bla;
bool bla2 = data._bla2;
}
}