首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >关于set和get方法的不同写作风格

关于set和get方法的不同写作风格
EN

Stack Overflow用户
提问于 2013-08-21 13:41:00
回答 4查看 110关注 0票数 0

我的问题是设置和获得方法。虽然我知道如何使用和为什么要使用for,但我无法理解这些使用样式之间的主要区别。

代码语言:javascript
复制
public string a{get;set;} 

public string a
{
  get{return a;}
  set{a=value;}
}
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-08-21 13:46:26

如果希望使用较少的代码,请使用第一种形式,称为auto属性。在场景后面,编译器将为您创建支持字段。

如果您在物业中进行了一些处理,请使用标准方法。

代码语言:javascript
复制
public string A{get;set;} //Auto property

public string A
{
  get{return a;}`
  set{
//Do some check-Processing
    if(value != null)
       a=value;
    }
}
票数 1
EN

Stack Overflow用户

发布于 2013-08-21 13:42:16

第一种形式是自动实现的属性 in C#

在C# 3.0及更高版本中,当属性访问器中不需要额外的逻辑时,自动实现的属性使属性声明更加简洁。

当前表单中的第二种形式(虽然不正确)需要显式定义支持字段,并且可以放置显式代码来设置和读取值。

第二种形式可以是:

代码语言:javascript
复制
private string _a; // a backing field
public string a
{
    get
    {
        return _a;
    }
    set
    {
        if (a != null) //some validation
            _a = value;
        else
            _a = string.Empty;
    }
}

(目前,第二种形式的属性将导致堆栈溢出异常,因为它将进入无限循环)

票数 5
EN

Stack Overflow用户

发布于 2013-08-21 13:42:43

第一个将生成一个隐式字段,您的值将被写入和读取。这些被称为“自动实现的属性”。而在第二种情况下,您将显式地命名您的属性将写入和读取的字段。来自MSDN

在C# 3.0及更高版本中,当属性访问器中不需要额外的逻辑时,自动实现的属性使属性声明更加简洁。它们还使客户端代码能够创建对象。当您声明一个属性时,如下面的示例所示,编译器将创建一个私有的匿名备份字段,该字段只能通过属性的get和set访问器访问。

您的实现

代码语言:javascript
复制
public string a
{
  get{return a;}
  set{a=value;}
}

将导致StackoverflowException,因为您在get-accessor中递归地调用get

把它改成

代码语言:javascript
复制
private string a;

public string A{

get{ return a; }
set{ a = value; }

}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18359051

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档