DefaultValue在控制台应用程序中是否有效?

时间:2013-08-02 08:37:57

标签: c# .net

class Program
{
    class B
    {
        [DefaultValue(2)]
        public int x, y;

        [DefaultValue(5)]
        public int z;
    }

    static void Main(string[] args)
    {
        B b = new B();
        Console.WriteLine(String.Format("{0} {1} {2}", b.x, b.y, b.z));
    }
}

结果:0,0,0

这个DefaultValueAttribute在控制台应用程序中不起作用,或者我做错了什么?

修改

有人说get,set属性,但这也行不通:

class Program
{
    public class A
    {
        [DefaultValue("123")]
        public string Name { get; set; }
    }

    static void Main(string[] args)
    {
        var a = new A();
        Console.WriteLine(a.Name);
    }
}

结果:空字符串

4 个答案:

答案 0 :(得分:3)

DefaultValue并没有真正做任何事情,它具有指示功能,以便其他代码可以查找它,MSDN explains

  

视觉设计师可以使用默认值来重置成员   值。代码生成器也可以使用默认值来确定   是否应为该成员生成代码。一个   DefaultValueAttribute不会自动导致成员   使用属性值初始化。您必须设置初始值   在你的代码中。

答案 1 :(得分:2)

请参阅:DefaultValueAttribute Class

  

指定属性的默认值。

xyz不是属性,而是字段。 试试这个:

    class B
    {
        public int x, y, z;
        public B()
        {
            x = y = 2;
            z = 5;
        }
    }

答案 2 :(得分:2)

DefaultValue作为属性被某些类用于在运行时对您的对象执行某些操作(例如,如果序列化程序的值为5,则序列化程序可以决定不序列化z,因为这是默认值)

编译器不使用该属性为您的类生成默认构造函数。

您应该改为定义默认构造函数,如下所示:

class B {
    public B() { 
        x = y = 2;
        z = 5;
    }
}

答案 3 :(得分:1)

您对.net属性的期望过高。属性只是元数据的扩展。也就是说,编译器只是将此sorta信息绑定到特定属性,而不是设置您期望的实际值。 因此,如果您想获得值集,必须有一些额外的代码,无论是您自己编写还是其他框架为您编写。 您可以在堆栈溢出时检查此链接。 .Net DefaultValueAttribute on Properties