可能是重复问题:
创建通用属性
我不太确定如何做到这一点,但我想创建一种特殊类型的属性,在泛型类型上定义,它会在get
和set
时执行特定任务。
例如,当编写以下内容时:
MyProp<String> name;
预定义的 get
和 set
将在字符串值上执行。
如何实现呢?
谢谢!
可能是重复问题:
创建通用属性
我不太确定如何做到这一点,但我想创建一种特殊类型的属性,在泛型类型上定义,它会在get
和set
时执行特定任务。
例如,当编写以下内容时:
MyProp<String> name;
预定义的 get
和 set
将在字符串值上执行。
如何实现呢?
谢谢!
public class MyProp<T>
{
private T _value;
public T Value
{
get
{
// insert desired logic here
return _value;
}
set
{
// insert desired logic here
_value = value;
}
}
public static implicit operator T(MyProp<T> value)
{
return value.Value;
}
public static implicit operator MyProp<T>(T value)
{
return new MyProp<T> { Value = value };
}
}
然后在类中像这样使用它:
class SomeClass
{
public MyProp<int> SomeProperty { get; set; }
}
MyProp
的 Value
属性,但可以编写代码以更加“自然”的方式访问该值:SomeClass instance = new SomeClass();
instance.SomeProperty = 32;
int someInt = instance.SomeProperty;
}
public String property2
{
get
{
myProp2.callGet();
}
}
} - froggythefrogclass Foo
{
string MyProperty { get; set; } // auto-property with inaccessible backing field
}
一个通用版本可能是这样的:
class Foo<T>
{
T MyProperty { get; set; }
}
好的,我来翻译。你想要的是这样的东西:如果你像这样声明一个“属性”:
更新:我现在非常确定Fredrik Mörk回答了你的问题并给出了解决方案。我对这个想法不是很满意,但它似乎恰好回答了我从你的问题中理解到的内容。
public class PropertyFoo {
public MyProp<String> Name;
}
这最终变成
public class PropertyFoo {
public string Name {
get { /* do predefined stuff here */ }
set { /*other predefined stuff here */ }
}
}
不可能实现且也不是一个属性。在你的IDE中寻找模板/片段支持。
您只需按照通用类型的正常方式声明该属性:
public MyType<string> PropertyName { get; set; }
如果你想调用预定义的方法在get或set中执行某些操作,那么需要实现属性的getter/setter来调用这些方法。
您需要创建一个名为MyProp的通用类。然后,您将需要添加隐式或显式的转换运算符,以便您可以获取和设置该值,就像它是在通用类型参数中指定的类型一样。这些转换运算符可以执行您所需的额外工作。
public class MyProp<T>
{
...
}
public class ClassThatUsesMyProp
{
public MyProp<String> SomeProperty { get; set; }
}
MyProp<string> name { get { return DoCustomGet(); } { set { DoCustomSet(value); } }
这样行不行? - Jaxidian