当前位置:  开发笔记 > 编程语言 > 正文

C#速记属性问题

如何解决《C#速记属性问题》经验,为你挑选了5个好方法。

所以这里有一些我从未见过的语法,有人能告诉我这意味着什么吗?不确定这是否应该是抽象属性声明的一些简写或什么或什么.

public Class1 myVar { get; set; }

值得一提的是,Class1是一个抽象类.



1> alex..:

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

// Auto-Impl Properties for trivial get and set
    public double TotalPurchases { get; set; }
    public string Name { get; set; }
    public int CustomerID { get; set; }



2> laktak..:

这是让编译器为您创建(隐藏)字段的语法.

同样非常有用的是:

public Class1 myVar{ get; private set; }



3> Andrew Hare..:

它可能看起来像一个抽象属性或来自界面的属性,但它远非如此.为了鼓励开发人员使用属性(因为它们是出于多种原因的最佳实践),Microsoft决定在C#3中包含此功能,以便您更轻松地声明属性.

以下是创建属性的标准方法:

String foo;

public String Foo
{
    get { return this.foo }
    set { this.foo = value; }
}

现在这需要相当多的打字,而且由于开发人员对核心很懒,有时候我们很想创建公共字段以节省一些时间.

现在使用C#3编译器,我们可以这样做:

public String Foo { get; set; }

虽然这看起来有点奇怪,但请考虑编译器代表您做的工作.之前的代码被编译为:

[CompilerGenerated]    
private string k__BackingField;

public string Foo
{
    [CompilerGenerated]
    get
    {
        return this.k__BackingField;
    }
    [CompilerGenerated]
    set
    {
        this.k__BackingField = value;
    }
}

因此,即使语法看起来有点奇怪,您仍然会按照您习惯的方式创建属性.



4> Joel Coehoor..:

它被称为自动或自动实现的属性,它不是抽象的.您可以按原样使用该属性.编译器将在后台为它创建一个后备存储.

它非常类似于使用字段而不是属性,但是您获得属性语义,并且可以将它用于需要属性的数据绑定之类的东西.



5> DefLog..:

它是一个属性的简写,它不再执行将值存储在字段中的功能.所以它相当于:

private Class1 _myVar;

public Class1 myVar
{
  get{ return _myVar; }
  set{ _myVar = value;}
}

它只是一个简单的属性,yoy可以在以后更改复杂的evantuation而不改变界面.

推荐阅读
黄晓敏3023
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有