如何使用自定义属性为 C# 自动属性赋予默认值?
这是我想看的代码:
class Person
{
[MyDefault("William")]
public string Name { get; set; }
}
我知道没有使用属性初始化默认值的内置方法 - 我可以编写自己的自定义类来使用我的自定义属性来初始化默认值吗?
最佳答案
如果您想使用 PostSharp(如您的标签所建议的那样)进行操作,请使用延迟加载方面。你可以看到我在这里 build 的http://programmersunlimited.wordpress.com/2011/03/23/postsharp-weaving-community-vs-professional-reasons-to-get-a-professional-license/
对于方面,您可以将默认值应用于单个属性,或者通过类级别的单个声明将其应用于多个属性。
延迟加载方面将使用 LocationInterceptionAspect 基类。
[Serializable]
[LazyLoadingAspect(AttributeExclude=true)]
[MulticastAttributeUsage(MulticastTargets.Property)]
public class LazyLoadingAspectAttribute : LocationInterceptionAspect
{
public object DefaultValue {get; set;}
public override void OnGetValue(LocationInterceptionArgs args)
{
args.ProceedGetValue();
if (args.Value != null)
{
return;
}
args.Value = DefaultValue;
args.ProceedSetValue();
}
}
然后像这样应用方面
[LazyLoadingAspect(DefaultValue="SomeValue")]
public string MyProp { get; set; }
关于c# - 如何使用自定义属性为 C# 自动属性提供默认值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6405831/