如何使用ReSharper自动创建不可变属性?

时间:2014-04-08 14:54:20

标签: c# .net resharper

我发现自己在模式之后创建了大量属性:

private readonly MyType sth;

public MyClass(MyType sth) //class constructor
{
  this.sth = sth;
}

public MyType Sth
{
  get { return sth; }
}

是否有一种简单的方法可以自动创建这些属性?通常我:

  1. 键入字段,包括readonly关键字
  2. 选择“从构造函数参数初始化
  3. 选择“封装”
  4. 是否可以加快速度?

4 个答案:

答案 0 :(得分:3)

使用C#6,您的示例可以重写为:

private MyType sth { get; }

public MyClass(MyType sth) //class constructor
{
  this.sth = sth;
}

这称为仅限getter的自动属性。当您删除“私有集”时,属性后面生成的字段被声明为只读像这样。

来自https://msdn.microsoft.com/en-us/magazine/dn879355.aspx

  

只有getter-only自动属性在结构和类声明中都可用,但它们对结构特别重要,因为结构是不可变的最佳实践指南。而不是声明一个只读属性并在C#6.0之前初始化它所需的六行左右,现在只需要单行声明和构造函数中的赋值。因此,不可变结构的声明现在不仅是结构的正确编程模式,而且是更简单的模式 - 从先前语法的一个非常值得赞赏的变化,其中编码正确地需要更多努力。

答案 1 :(得分:2)

请考虑此实时模板:

private readonly $MyType$ $FieldName$;

public $ClassName$($MyType$ $FieldName$) //class constructor
{
  this.$FieldName$ = $FieldName$;
}

public $MyType$ $PropName$
{
  get { return $FieldName$; }
}

其中参数的顺序为:

  1. PROPNAME
  2. ClassName(在选择宏中选择“包含类型名称”)
  3. 的MyType
  4. FieldName(在选择宏中选择“第一个字符为小写的另一个变量的值”,然后在那里指定PropName) - 在右上角的下拉菜单中也选择“不可编辑”
  5. 它看起来应该是http://screencast.com/t/aRQi0xVezXMb

    希望它有所帮助!

答案 2 :(得分:0)

您可以利用自动getter和setter来使代码更清晰

public readonly MyType Sth {get; private set;}

public MyClass(MyType sth)
{
    Sth = sth;
}

答案 3 :(得分:0)

我使用这个R#模板(名为prop):

public $TYPE$ $NAME$ { get; private set; }

它不会一直带你,如果你需要readonly和readonly很好。

一个alt +输入选项' to readonly'会很甜蜜。

方式是alt + enter> '对于具有支持字段的财产'然后删除setter + add readonly。不是很自动。