Vì vậy, nếu có một tài sản trong một class
gọi Bar
, tại sao tôi không thể truy cập enum
tài sản hoặc static
sở hữu bất kỳ type
<T>
trong tình huống này enum
. Tôi đang tuyên bố hoàn toàn rằng <T>
là của type
Bar
. Chỉ muốn biết liệu nó có đơn giản là giới hạn của Generics hay chính bản thân số enum
type
.Bắt một Enum hoặc tĩnh tài sản từ Generic Loại Reference <T>
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
};
}
CẬP NHẬT
Trong câu trả lời @Frederik Gheysels, nó đề cập rằng nếu tôi có một class
mà chỉ đơn giản có nguồn gốc từ Bar
rằng tôi sẽ không có quyền truy cập vào các enum
hoặc bất kỳ static
của số base
. Điều đó là không chính xác, điều này biên dịch và hoạt động.
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
}
}
Tại sao bạn * muốn * để có thể thực hiện điều đó? Trường hợp sử dụng ở đây là gì? –
Tương tự như http://stackoverflow.com/questions/196661/calling-a-static-method-on-a-generic-type-parameter – AlG
Bạn đang cố gắng thực hiện điều gì đó tương tự như [this] (http: // stackoverflow .com/questions/4704201/what-is-the-best-way-to-ghi đè-enums)? –