是否可以在c#中使用getter / setter模板?

时间:2014-02-20 18:58:45

标签: c# setter getter

我想申请:

private string _name;

public string name
{
    get { return _name; }
    set { _name = Fix(value); }
}

将所有类的成员串起来,并且不希望为所有类成员重复相同的代码。

一个明显的解决方案是将该代码放在一个类来处理问题,并将所有字符串成员声明为:myString而不是string,但这意味着我必须访问像这样的主要类成员:email.fixed而不仅仅是email

所以我想知道,是否有某种模板我可以定义然后轻松应用?

4 个答案:

答案 0 :(得分:7)

您可以为Visual Studio创建Code Snippet来处理以这种方式构建属性。

MSDN包含Creating a Code Snippet的文档,其中可包含替换参数(名称)。

答案 1 :(得分:2)

您可能希望研究面向方面编程,它可以让您轻松完成这样的操作。

http://www.codeproject.com/Articles/337564/Aspect-Oriented-Programming-Using-Csharp-and-PostS

答案 2 :(得分:0)

创建一个带有string的隐式转换的类型:

public class FixedString
{
    private string str;
    public FixedString(string str){this.str = str;}
    public static implicit operator FixedString(string str)
    {
        return new FixedString(Fix(str));
    }
    public static implicit operator string(FixedString fixed)
    {
        return fixed.str;
    }
}

您现在可以创建此类型的属性,但将其视为字符串。

答案 3 :(得分:0)

创建正则表达式替换并使用Visual Studio(v2012 / 2013)查找并替换正则表达式功能。

例如,假设您有field这样的内容可以更改为属性

public string Name;

并且您希望将其更改为具有支持字段和所需的设置器。

private string _Name;

public string Name 
{
   get { return _Name; }
   set { _Name = Fix(value); }
}

在Visual Studio中查找/替换正则表达式模式是这个

public\s+string\s([^;]+);

替换模式(具有适当的行间距和制表符)是

private string _$1;\r\n\r\n\tpublic string $1\r\n\t{\r\n\t\tget\r\n\t\t\t{ return _$1; }\r\n\t\tset\r\n\t\t\t{\r\n\t\t\t\t_$1 = Fix(value);\r\n\t\t\t}\r\n\t\t}

然后逐步完成查找并根据需要在班级中进行替换。

我已经完成了类似的操作,在对代码段<tab><tab>prop操作后创建的空白属性上添加了INotifyChange方法调用。