Gab*_*abe 5 c# generics .net-4.0
因此,如果被叫中存在enum
属性,为什么我无法访问该属性或此情况下的任何属性.我隐含地宣称那是.只是想知道它是否只是泛型或其本身的限制.class
Bar
enum
static
type
<T>
<T>
type
Bar
enum
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
这两个类,因为不会创建该类型。嵌套类型不是实例成员,因此不会被继承。