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

Con*_*ngo 2 c# postsharp .net-4.0 visual-studio-2010

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

这是我想看到的代码:

class Person 
{
    [MyDefault("William")]
    public string Name { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我知道没有内置方法来使用属性初始化默认值 - 我可以编写自己的自定义类来使用我的自定义属性来初始化默认值吗?

Dus*_*vis 6

如果您想使用PostSharp(如标记所示),则使用延迟加载方面.你可以看到我在这里建造的那个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();
        }

    }
Run Code Online (Sandbox Code Playgroud)

然后应用这样的方面

[LazyLoadingAspect(DefaultValue="SomeValue")]
public string MyProp { get; set; }
Run Code Online (Sandbox Code Playgroud)

  • +1因为你给了他一个明亮的回答 (4认同)