我不是在讨论声明具有泛型参数类型的属性或字段的泛型类.我在谈论可以应用于泛型和非泛型类的泛型属性.
我不是在说这个:
public class Base{ public T BaseProperty { get; set; } }
我在说这个:
public class Base { public T BaseProperty{ get { // Insert magic } set { // Insert magic } } }
或这个:
public class Base { public T BaseProperty{ get { // Insert magic } set { // Insert magic } } public U OtherBaseProperty { get; set; } }
用法将是这样的:
var b = new Base(); b.BaseProperty= 42; int i = b.BaseProperty ; b.BaseProperty = "Hi"; string s = b.BaseProperty ;
或者对于第二个例子:
var b = new Base(); b.BaseProperty = 42; int i = b.BaseProperty ; b.OtherBaseProperty = "Hi"; string s = b.OtherBaseProperty;
// Insert Magic指的是处理对类型参数具有不同类型的泛型属性getter或setter的每次调用.
例如:
b.BaseProperty= 42;
需要以不同的方式处理:
b.BaseProperty= "Hi";
我会设想对于每个类型T,如果在调用setter之前调用getter,则返回default(T).当调用setter时,每个类型T都存储一个值,这样当随后调用getter时,将返回为该类型设置的先前值.
请注意,封面下的属性只是方法.
你认为这会有用吗?
我曾经有过几次我希望能够做到这一点的能力,是的.
但是,所涉及的语法会非常难看,并且它很少有用,我认为我更喜欢把它搞砸并使用泛型方法.