【发布时间】:2012-02-10 15:58:33
【问题描述】:
因此,如果class 中有一个名为Bar 的enum 属性,为什么在这种情况下我不能访问enum 属性或type <T> 的任何static 属性。我含蓄地声明 <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
};
}
更新
在 @Frederik Gheysels 的 回答中提到,如果我有一个简单地从 Bar 派生的 class,那么我将无法访问 enum 或任何 @987654339 @ 的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
}
}
【问题讨论】:
-
您为什么希望能够做到这一点?这里的用例是什么?
-
您是否正在尝试完成类似于this 的事情?
-
@Jon Skeet,用例,没有。有人问我为什么这是不可能的。我唯一能想到的是,它只是泛型的一个限制。我只是想看看有没有更好的答案。
-
@Gabe:值得牢记的是“为什么 X 不可能?”的正确答案。通常是“因为它没有足够的用处来设计、指定、实施和测试资源”——其中包括“它作为一个想法从根本上被打破了”:)