c# - 如何使用自定义属性为 C# 自动属性提供默认值?

标签 c# visual-studio-2010 .net-4.0 postsharp

如何使用自定义属性为 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/

相关文章:

c# - 如何根据百分比管理 AI 操作

visual-studio-2010 - VS2010 beta 1 智能感知速度

c# - 非泛型类中的泛型方法

c# - 为什么我不能清除 datagridview 控件中的行?

c# - 在通用 Windows 应用程序中获取键盘状态

c# - IQueryable 不包含 ToList()

c# - 如何检查 C# 中的动态匿名类型上是否存在属性?

c++ - 链表 : Can't access last node, 获取 R6010 (C++, VS2010)

visual-studio - 为什么我的所有异常消息现在都以 "crossed a native/managed boundary"结尾

c# - 从 BindingExpression 获取源属性类型