如何使属性参数

问题描述:

我想打一个属性,让我来指定用于财产的一些方法,这样的方法参考:如何使属性参数

public class MyClass 
{ 
    [MyAttribute(Converter="ConverterMethod")] 
    public string Prop { get; set; } 

    public static string ConverterMethod(string src) 
    { 
     return src + " converted"; 
    } 
} 

什么是“正确”的方式做到这一点?

这里是我看到的方式:

  1. 制作字符串属性和提取相应的方法与反思运行
  2. 期间
  3. Dictionary<string, Func<string, string>>与运行时对应的方法来填充它。然后使用属性的字符串属性作为关键字提取方法。这种方法更耐重构,如果我重命名方法一切都会工作(字典键将保持不变)
  4. 使'IConverter'界面,并通过typeof(ConverterImpl)属性。然后在运行时创建一个转换器实例并使用其接口转换值。这种方式似乎对我来说是最好的,但我从来没有在属性中使用Type属性,甚至不知道它们是否序列化良好。

哪种方法最好?还有其他方法吗?人们通常如何做这种事情?

第一个选项非常正常,并且具有简单性的优点。你说它对重构有点容易,但是......这很少是一个“真正的”问题。然而,另一种(第四种)方法是使用抽象方法创建属性抽象,并使用属性中的转换代码对其进行子类化 - 然后在运行时您可以获取属性(作为基本属性)并且只是调用虚拟方法,这种方法在MVC等事情中很常见。个人而言,我通常只使用第一个选项,以及单元测试的安全性(在重构等情况下)。