使用ReSharper为属性生成只读字段

5

我发现ReSharper是否能够为属性生成一个私有的只读后备字段,是否有一种定义自定义脚本的方法可以做到这一点?

想象一下你有一个属性

public Type PropertyName { get; set; }

然后你将光标置于此行,按下Alt+Enter,会出现一个菜单项,将属性转换为

private readonly Type propertyName;

public Type PropertyName { get { return propertyName; } }

我发现自己经常需要使用这个功能。

2个回答

8
使用 R#,您可以创建一个Live Template。在这种情况下:
  1. ReSharper > Templates Explorer
  2. Live Templates Tab > New Template (小网格图标)
  3. Shorcut:propReadOnly(这将是与智能感知一起使用的快捷方式)
  4. Description:适合您的任何工作...
  5. Available:在允许类型成员声明的 C# 2.0 中
  6. 创建模板如下:

    private readonly $Type$ $propertyName$;

    public $Type$ $PropertyName$ { get { return $propertyName$; } }

$SomeText$中包含文本将指定该文本为R#操纵的变量。
在变量名称面板中:
Name             Value             Editable Occurence
Type             Choose Macro*     #2
PropertyName     Choose Macro*     checkbox is checked
propertyName     (see below)       not editable
                 Macro > - Value of annother variable with the first character in lower case
                         - Select "PropertyName" as the other variable

*Choose Macro is displayed when no macro is selected; this is the default setting

保存后,您可以通过键入快捷方式“propReadOnly”在Visual Studio中立即使用该模板。

对于像我这样的“Live Template新手”,请确保在“变量名称面板”中使用上下箭头,以便参数按照所示顺序排列。“类型”位于顶部,其次是“PropertyName”,最后是“propertyName”。感谢@metro! - mmcfly

2
你可以用 ReSharper 来反其道而行之。
创建一个私有的只读后备字段:
private readonly Type propertyName;

然后按下alt + insert来生成属性。

另外请参阅:生成属性

编辑:

另一个选项是先创建一个属性,如下所示:

public MyProperty PropertyName { get { return propertyField;  } }

然后,在字段名称上将光标放置并按下alt + enter即可创建字段。接着,您将跳转到该字段,再次按下alt + enterResharper将使其成为构造函数参数。最后,您现在可以选择按下alt + enter,将字段设置为只读。


是的,我知道这个。但我很少先创建一个只读字段,然后再生成一个属性。更常见的情况是,我先创建一个属性,然后发现该属性可以是只读的,因为它在构造函数中分配后从未更改过。 - Ondrej Janacek
我理解,也许编辑可以在这种情况下帮助您。但是我也明白,添加字段名称仍需要一些工作。 - Jos Vinke
感谢您的回答。最终,我接受了其他答案,因为它给了我完全符合要求且没有变通方法。它也更好地回答了我的问题,因为我正在寻求一个自定义脚本。 - Ondrej Janacek

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接