【问题标题】:Is there a way to change attributes in runtime using postsharp?有没有办法使用 postsharp 在运行时更改属性?
【发布时间】:2013-07-09 11:01:29
【问题描述】:

我想要做的是翻译一个使用属性在控件中设置文本的应用程序。我正在考虑自定义资源管理器,但必须对属性进行硬编码。 我的问题是:

有没有办法使用 PostSharp 更改属性设置的可见文本以及属性在运行时存储在哪里?

例如代码

[DataMember]
[DisplayName("Mission description")]
[Description("Description of this mission")]
public string Description { get; set; }

我想要实现的是将“任务描述”和“此任务的描述”提取到外部文件,翻译它,并在程序执行期间将新的翻译值作为属性传递给描述字符串。

【问题讨论】:

  • 您能否用一个您希望能够编写的代码示例来完成您的问题,并描述该代码的预期效果?

标签: c# attributes translation postsharp


【解决方案1】:

我要做的是创建一个继承自 System.ComponentModel.DisplayNameAttribute 的类,将其命名为“DisplayNameAttribute”以覆盖父类,并覆盖父类构造函数、“DisplayName”和“DisplayNameValue”属性。 接下来,我将我的逻辑放入 DisplayNameValue getter。 然后类推创建DescriptionAttribute类。

public class DisplayNameAttribute : System.ComponentModel.DisplayNameAttributes
{
        private string name;

        public DisplayNameAttribute() { }
        public DisplayNameAttribute(String name) { this.name = name; }

        public override string DisplayName 
        { 
            get 
            { 
                return DisplayNameValue;
            } 
        }

        public string DisplayNameValue
        {
            get
            {
                /* e.g logic for reading from dictionary file */
                return myDictionary[name];
            }
            set
            {
                name = value;
            }
        }
    }
}

“字符串名称”是我保存字典键的位置。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-03-12
    • 2020-11-15
    • 1970-01-01
    • 1970-01-01
    • 2012-04-20
    • 1970-01-01
    • 2015-06-09
    • 1970-01-01
    相关资源
    最近更新 更多