C#中的通用属性

rac*_*mos 30 c# generics properties

可能重复:
制作通用属性

我不太确定如何做到这一点,但我想要做的是创建一个特殊类型的属性,它将在get和执行特定任务set,并将在泛型类型上定义.例如,写这篇文章时:

MyProp<String> name;
Run Code Online (Sandbox Code Playgroud)

预定义get并将set对字符串值执行.

怎么办?

谢谢!

Fre*_*örk 80

你可以创建一个这样的泛型类:

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 };
    }
}
Run Code Online (Sandbox Code Playgroud)

...然后在类这样的类中使用它:

class SomeClass
{
    public MyProp<int> SomeProperty { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

隐式运算符意味着您不需要显式设置或获取Value属性MyProp,但可以编写代码以更"自然"的方式访问值:

SomeClass instance = new SomeClass();
instance.SomeProperty = 32;
int someInt = instance.SomeProperty;
Run Code Online (Sandbox Code Playgroud)


Hen*_*man 5

您不能以这种方式“更改”属性语法。你可以做的是:

class Foo
{
    string MyProperty { get; set; }  // auto-property with inaccessible backing field
}
Run Code Online (Sandbox Code Playgroud)

通用版本如下所示:

class Foo<T>
{
    T MyProperty { get; set; }
}
Run Code Online (Sandbox Code Playgroud)