C# 3.0 自动属性问题

C# 3.0 自动属性问题,c#-3.0,automatic-properties,C# 3.0,Automatic Properties,目前我正在使用.NET3.0,但我不知道如何使用自动属性。 例如,如果我想通过Authomatic属性编写此示例代码,我应该怎么做 private string _name = string.Empty; private string _family = string.Empty; //A field with default value private DateTime _releaseDate = System.DateTime.Now; //ReadOnly Property pub

目前我正在使用.NET3.0,但我不知道如何使用自动属性。

例如,如果我想通过Authomatic属性编写此示例代码,我应该怎么做

private string _name = string.Empty;
private string _family = string.Empty;
//A field with default value
private DateTime _releaseDate = System.DateTime.Now;


//ReadOnly Property
public string Name
{
    get {return _name; }
}

//enforce validation rules on setting 
public string Family
{
    get { _family; }
    set
    {
        if (value.Length < 3)
            return new Exception("Family need at least 3 character long");
        else
            _family = value;
    }
}

// A property from two other fields
public string FullName
{
    get { return _name + " " + _family; }
}
private string\u name=string.Empty;
私有字符串_family=string.Empty;
//具有默认值的字段
private DateTime _releaseDate=System.DateTime.Now;
//只读属性
公共字符串名
{
获取{return\u name;}
}
//对设置强制执行验证规则
公共字符串族
{
获取{u family;}
设置
{
如果(值.长度<3)
返回新的异常(“族需要至少3个字符长”);
其他的
_家庭=价值;
}
}
//来自其他两个字段的属性
公共字符串全名
{
获取{return\u name++++\u family;}
}
谢谢大家的回复,我得到了我的答案你不能

自动属性只是为您创建一个私有支持字段,并对您隐藏该字段。如果您需要在属性中包含逻辑,您应该自己实现它

使用自动属性时,必须同时具有getter和setter,但可以将setter设置为私有,例如:

public string Foo { get; private set; }
顺便说一下,您不能从字符串属性返回异常。异常应该被抛出,而不是返回

公共字符串族
{
获取{u family;}
设置
{
如果(值.长度<3)
返回新的异常(“族需要至少3个字符长”);
其他的
_家庭=价值;
}
}
这大概应该是:

public string Family
{
    get { _family; }
    set
    {
        if (value.Length < 3)
            throw new Exception("Family need at least 3 character long");
        else
            _family = value;
    }
}
公共字符串族
{
获取{u family;}
设置
{
如果(值.长度<3)
抛出新异常(“家族需要至少3个字符长”);
其他的
_家庭=价值;
}
}
你不能

自动属性只是为您创建一个私有支持字段,并对您隐藏该字段。如果您需要在属性中包含逻辑,您应该自己实现它

使用自动属性时,必须同时具有getter和setter,但可以将setter设置为私有,例如:

public string Foo { get; private set; }
顺便说一下,您不能从字符串属性返回异常。异常应该被抛出,而不是返回

公共字符串族
{
获取{u family;}
设置
{
如果(值.长度<3)
返回新的异常(“族需要至少3个字符长”);
其他的
_家庭=价值;
}
}
这大概应该是:

public string Family
{
    get { _family; }
    set
    {
        if (value.Length < 3)
            throw new Exception("Family need at least 3 character long");
        else
            _family = value;
    }
}
公共字符串族
{
获取{u family;}
设置
{
如果(值.长度<3)
抛出新异常(“家族需要至少3个字符长”);
其他的
_家庭=价值;
}
}

你说你在使用.NET 3.0-你在使用VS2005吗?如果是这样,您使用的是不支持自动实现属性的C#2

如果您使用的是VS2008和目标.NET3.0,那么它们应该可以很好地工作——但它们实际上并不适用于这种情况,因为您的任何属性都不是“普通”属性。自动实现的属性是一种紧凑的编写方式:

private string foo;
public string Foo { get { return foo; } set { foo = value; } }

如果您的属性不遵循该模式(属性的模访问修饰符),则自动属性对您没有帮助。

您说您使用的是.NET 3.0-您使用的是VS2005吗?如果是这样,您使用的是不支持自动实现属性的C#2

如果您使用的是VS2008和目标.NET3.0,那么它们应该可以很好地工作——但它们实际上并不适用于这种情况,因为您的任何属性都不是“普通”属性。自动实现的属性是一种紧凑的编写方式:

private string foo;
public string Foo { get { return foo; } set { foo = value; } }

如果您的属性不遵循该模式(属性的模访问修饰符),则自动属性对您没有帮助。

当您只想让属性“重复”备份字段时,将使用自动属性

i、 e

可以简单地重写为

public string Name { get; set; }
编译器为您展开一个随机命名的私有备份字段,并编写与第一个代码示例等效的代码

但是,如果您想执行任何特殊操作,如默认值,或验证设置的
,则不能使用它们

实际上,可能的例外是默认初始化


您可以使用构造函数来默认初始化属性。

当您只想让属性“重复”备份字段时,将使用自动属性

i、 e

可以简单地重写为

public string Name { get; set; }
编译器为您展开一个随机命名的私有备份字段,并编写与第一个代码示例等效的代码

但是,如果您想执行任何特殊操作,如默认值,或验证设置的
,则不能使用它们

实际上,可能的例外是默认初始化


您可以使用构造函数来默认初始化属性。

您不能。自动属性不能是只读的,也不能在正文中包含逻辑

自动属性只是其中的一个简短形式

private string _name;
public string Name
{
   get{return _name;}
   set{_name = value;}
}
对此

public string Name{get;set;}

你不能。自动属性不能是只读的,也不能在正文中包含逻辑

自动属性只是其中的一个简短形式

private string _name;
public string Name
{
   get{return _name;}
   set{_name = value;}
}
对此

public string Name{get;set;}

谢谢。是的,你是对的,我当然应该扔,我只是写了没有编译和测试。如你所说,制作私有setter有什么好处?它意味着只有这个类可以设置值;因此,值不能被其他类更改。因此,您可以使用它来创建不可变的对象。看到了,谢谢。是的,你是对的,当然我应该扔,我只是写了没有编译和测试。如你所说,制作私有setter有什么好处?它意味着只有这个类可以设置值;因此,值不能被其他类更改。因此,您可以使用它来创建不可变的对象。看见