Gab*_*abe 5 c# generics .net-4.0
因此,如果被叫中存在enum属性,为什么我无法访问该属性或此情况下的任何属性.我隐含地宣称那是.只是想知道它是否只是泛型或其本身的限制.classBarenumstatictype <T><T>type Barenum type
public class Foo<T> where T : Bar
{
public Foo()
{
// This obviously works
var car = Bar.Cars.Honda;
var name = Bar.Name;
// Why can't I do this ?
var car2 = T.Cars.Toyota;
var name2 = T.Name;
}
}
public class Bar
{
public static string Name { get; set; }
public enum Cars
{
Honda,
Toyota
};
}
Run Code Online (Sandbox Code Playgroud)
更新
在@Frederik Gheysels的回答中,提到如果我有一个class简单的派生Bar,我将无法访问enum或任何static一个base.这是不正确的,这编译和工作.
public class Foo : Bar
{
public Foo()
{
// This all works
var address = this.Address;
var car = Foo.Cars.Honda;
var name = Foo.Name;
}
}
public class Bar
{
public static string Name { get; set; }
public string Address { get; set; }
public enum Cars
{
Honda,
Toyota
}
}
Run Code Online (Sandbox Code Playgroud)
您的Cars枚举是 class 内的嵌套类型Bar。它不是 的成员属性/方法Bar。因此,这是不可能的。
Cars 只是 Bar 的嵌套类型。当您创建另一个派生自 Bar 的类(我们称其为 )时Bar2,您将无法访问Bar2.Cars这两个类,因为不会创建该类型。嵌套类型不是实例成员,因此不会被继承。