c# - 是否有可能 "extend"属性 "class"?

标签 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;
        }
    }
}

如您所见,唯一发生变化的是 Ressource1/Ressource2。 我的目标是能够写出类似这样的东西:

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

    public LocalizedString TravelDescription(Ressource2);
}

任何人有做这个的想法,或让我的代码更清晰的其他想法? 谢谢,

纪尧姆

最佳答案

在 C# 或 .NET 本身中没有执行此操作的工具,但如果您正在执行大量此类操作,则可能值得通过 postsharp 研究面向方面的编程。 .基本上它将允许您定义一个属性,该属性会导致在编译时注入(inject)额外的代码。您键入的代码类似于:

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

    [LocalizedProperty(source = "Ressource2")
    public string TravelDescription{ get; set; }
}

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

关于c# - 是否有可能 "extend"属性 "class"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1410916/

相关文章:

c# - 在 C# 中,如何将默认获取与显式设置混合使用?

c# - 无法等待 'void' 错误

design-patterns - 在主干中管理 View 的模式

JSF 转换器属性

php - 模型/ View / Controller 模型中验证的最佳位置?

java - 使用 Java 和 EclipseLink 实现状态模式

c# - 字段和属性有什么区别?

c# - 什么时候使用 Mock v. Stub,或者什么都不用?

c# - 退出表格 - 使用 "ProcessDialogKey"优于 "KeyUp"的优势

c# - 播放文件中的nAudio奇数缓冲区值