.net NET 4,我可以使用属性或其他OOP功能来简化此代码吗?

.net NET 4,我可以使用属性或其他OOP功能来简化此代码吗?,.net,asp.net,oop,.net,Asp.net,Oop,我有一个多语言系统,每个类中都有我称之为“包装器属性”的东西,例如: Public Property Name(Optional ByVal ForceLanguageCode As String = Nothing) As String Get Return Translations.GetByCode(Me.EntityID, "name", ForceLanguageCode) End Get Set(ByVal value As String)

我有一个多语言系统,每个类中都有我称之为“包装器属性”的东西,例如:

Public Property Name(Optional ByVal ForceLanguageCode As String = Nothing) As String
    Get
        Return Translations.GetByCode(Me.EntityID, "name", ForceLanguageCode)
    End Get
    Set(ByVal value As String)
        Translations.SetByCode(Me.EntityID, "name", value, ForceLanguageCode)
    End Set
End Property
然后,我会复制并粘贴每个可翻译字段的代码

我希望能够以某种方式用一行代码,用一个类来替换它。每次更改的唯一内容是字段的名称,如“名称”、“标题”或“主题”等。这似乎有点浪费,我希望我的系统尽可能易于开发人员使用

我对属性做了一些研究,但我不认为这是我的答案:

1) 我不知道如何自动实例化对象,尤其是在扩展LINQ实体时,DBML已经生成了New()签名。我目前的技术使用静态函数

2) “EntityID”是实时信息,而不是编译时信息


有谁能建议我如何清理这堆乱七八糟的东西吗?

你可以用lamdas代替string:

这样你至少可以进行编译时间检查

您可以使用stackwalking推断调用方法,从而推断相关属性。因此,您根本不需要手动引用该属性。但我不喜欢这种方法

你可以使用像这样的IL重写器。然后可以用属性替换手动代码。PostSharp然后将样板代码添加到具有该属性的Properties


但我不确定你的本地化总体设计是否良好。我从来没有见过这样做。我不明白setter是干什么用的。

可以用lamdas代替字符串:

这样你至少可以进行编译时间检查

您可以使用stackwalking推断调用方法,从而推断相关属性。因此,您根本不需要手动引用该属性。但我不喜欢这种方法

你可以使用像这样的IL重写器。然后可以用属性替换手动代码。PostSharp然后将样板代码添加到具有该属性的Properties


但我不确定你的本地化总体设计是否良好。我从来没有见过这样做。我不明白塞特是干什么用的。

很抱歉这么晚才接受。我可以想象,当试图解决我的问题时,理解MVC的TryUpdateModel是如何工作的会很有帮助,这似乎也会以某种方式遍历属性并检查它们的属性,等等。这会在MVC源代码中有所发现。很抱歉,很晚才接受。我可以想象,当试图解决我的问题时,理解MVC的TryUpdateModel是如何工作的会很有帮助,这似乎也会以某种方式遍历属性并检查它们的属性,等等。这会在MVC源代码中有所发现。