是否可以"扩展"财产"类"?

Gui*_*e86 4 c# design-patterns properties

我是C#的新手(上周开始),所以对我很冷静;).我想知道我是否能以某种方式编写自定义属性,让我解释一下:

我有一些部分类,我通过添加属性完成,但所有getter和setter的模式是相同的,所以我想分解这个:

public partial class Travel
{
    public String TravelName
    {
        get
        {
            return LocaleHelper.GetRessource(Ressource1);
        }
        set
        {
            if (this.Ressource1 == null)
                Ressource1 = new Ressource() { DefaultValue = value };
            else
                Ressource1.DefaultValue = value;
        }
    }

    public String TravelDescription
    {
        get
        {
            return LocaleHelper.GetRessource(Ressource2);
        }
        set
        {
            if (this.Ressource2 == null)
                Ressource2 = new Ressource() { DefaultValue = value };
            else
                Ressource2.DefaultValue = value;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,唯一改变的是Ressource1/Ressource2.我的目标是能够写出如下内容:

public partial class Travel
{
    public LocalizedString TravelName(Ressource1);

    public LocalizedString TravelDescription(Ressource2);
}
Run Code Online (Sandbox Code Playgroud)

有人有想法让这个或其他想法让我的代码更干净吗?谢谢,

纪尧姆

Mar*_*ris 7

在C#或.NET本身内没有设施可以做到这一点,但是如果你正在做很多这样的事情,那么通过postharp调查面向方面的编程可能是值得的.基本上它允许您定义一个属性,该属性导致在编译时注入额外的代码.您输入的代码如下:

public partial class Travel
{
    [LocalizedProperty(source = "Ressource1")
    public string TravelName { get; set; }

    [LocalizedProperty(source = "Ressource2")
    public string TravelDescription{ get; set; }
}
Run Code Online (Sandbox Code Playgroud)

在编译时,PostSharp将使用您在新LocalizedPropertyAttribute类中定义的模板替换该属性.