Pom*_*oma 6 .net c# reflection
我想创建一个属性,允许我指定一些应用于属性的方法,如下所示:
public class MyClass
{
[MyAttribute(Converter="ConverterMethod")]
public string Prop { get; set; }
public static string ConverterMethod(string src)
{
return src + " converted";
}
}
Run Code Online (Sandbox Code Playgroud)
这样做的"正确"方法是什么?
以下是我看到的方式:
Dictionary<string, Func<string, string>>在运行时使用相应的方法制作并填充它.然后使用属性的字符串属性作为键提取方法.这种方法更能抵抗重构,如果我重命名方法一切都会起作用(字典键将保持不变)typeof(ConverterImpl)给属性.然后在运行时创建转换器实例并使用其接口转换值.这种方式对我来说似乎是最好的,但我从未Type在属性中使用过属性,甚至不知道它们是否序列化良好.哪种方法最好?还有其他方法吗?人们通常如何做这样的事情?
第一个选项非常正常,并且具有简单的优点。你说得对,它有点容易重构,但是......这很少是一个“真正的”问题。
然而,另一种(第四种)方法是使用抽象方法使属性抽象,并使用属性中的转换代码对其进行子类化 - 然后在运行时您可以获得该属性(作为基本属性)并只需调用虚拟方法,这种方法在 MVC 等事物中很常见。
就我个人而言,我通常只使用第一个选项,以及安全单元测试(在重构等情况下)。