如何使用Visual Studio(和/或ReSharper)从类字段生成构造函数?
如何使用Visual Studio(和/或ReSharper)从类字段生成构造函数?
我已经习惯于许多Java IDE(Eclipse、NetBeans和IntelliJ IDEA)提供了一个命令,根据类中的字段生成默认构造函数。\n例如:\npublic class Example\n{\n public decimal MyNumber { get; set; }\n public string Description { get; set; }\n public int SomeInteger { get; set; }\n // ↓↓↓ 这是我想要生成的 ↓↓↓\n public Example(decimal myNumber, string description, int someInteger)\n {\n MyNumber = myNumber;\n Description = description;\n SomeInteger = someInteger;\n }\n}\n在大多数面向对象编程语言中,使用构造函数填充对象的所有字段是一个非常常见的任务,我假设在C#中有一些方法可以节省编写这些样板代码的时间。我是否对语言有一些基本的误解?在Visual Studio中是否有一些明显的选项?
问题出现的原因是在Visual Studio 2010中添加了一个名为“generate from usage”的新功能,目的是根据使用模式生成标准代码。其中一个功能是根据初始化模式生成构造函数。
这个功能可以通过智能标签来访问,当检测到模式时会出现智能标签。例如,假设我有以下类:
class MyType { }
然后我在我的应用程序中写下以下代码:
var v1 = new MyType(42);
由于不存在接受一个整数参数的构造函数,所以会出现一个智能标签,其中一个选项是“生成构造函数桩”。选择该选项后,将修改MyType
的代码如下所示:
class MyType { private int p; public MyType(int p) { // TODO: Complete member initialization this.p = p; } }
解决方法是使用智能标签中的“生成构造函数桩”选项来生成构造函数代码。
问题的原因是用户想要通过使用Visual Studio(和/或ReSharper)从类字段生成构造函数。用户想知道是否有一种方法可以自动生成构造函数,以便初始化所有字段。
解决方法是使用ReSharper的"Generate Constructor"工具。用户可以使用"Alt" + "Ins"热键来访问该工具。该工具允许用户选择要初始化的任何字段/属性。
然而,对于VS2010,它没有直接支持自动生成构造函数的功能。但是,VS2010添加了一个名为"Generate from usage"的工具。当用户尝试使用与现有构造函数不匹配的签名实例化类时,它会提示用户生成该构造函数。
但是需要注意的是,ReSharper并非免费使用的工具。
通过使用ReSharper的"Generate Constructor"工具可以生成构造函数,并通过使用"Alt" + "Ins"热键来访问该工具。对于VS2010,可以使用"Generate from usage"工具来生成构造函数。然而,需要注意的是,ReSharper并非免费使用的工具。
在使用Visual Studio(和/或ReSharper)时,如何从类字段生成构造函数?
在Visual Studio 2015 Update3中,我有这个功能。
只需将属性高亮显示,然后按下Ctrl + .,然后按下Generate Constructor。
例如,如果你选择了两个属性,它会建议你创建一个带有两个参数的构造函数,如果你选择了三个属性,它会建议一个带有三个参数的构造函数,以此类推。
在Visual Studio 2017和2019中也可以使用。
[![Auto generate shortcut visualisation](https://i.stack.imgur.com/7dTr6.png)](https://i.stack.imgur.com/7dTr6.png)
嘿,在Visual Studio 2015社区版中,这对我有效。不确定为什么这个功能不是很出名,但这很好。谢谢。:)
太完美了。如果我在你发布这个问题的那一天看到它的话,这个功能可以节省多少工作量... xD
值得一提的是,如果你使用C# 6只读属性(例如,public int Age { get; }
),则不会弹出该功能。它们需要指定setter,即使是临时的,该选项才可用。在VS2015 Community中进行了测试;不确定是否在VS2017中修复了此问题。
当你没有setter时,你怎么在构造函数中使用它呢?你应该使用底层属性
:在C# 6.0中,只读自动属性可以在构造函数中赋值。请参阅此处的示例:github.com/dotnet/roslyn/wiki/…
它在属性上方生成构造函数。是否可能将其设置为在属性下方生成构造函数?
很抱歉,我没有找到任何方法来实现这一点
如果可以更新为选中的答案,那就太好了。我差点开始研究如何获取ReSharper。ReSharper很好,但简单就是美。总是向下滚动并检查时间戳!
这是完美的解决方案!我会将其标记为真正的解决方案!
太棒了!我怎么生成一个无参构造函数?
你可以使用"ctor"代码片段。只需编写ctor然后按两次Tab键。
对于Mac OS(尽管找不到快捷键..):高亮显示属性-->右键单击-->快速修复-->生成构造函数
真是个省时的工具,耶!
这应该是答案,而不是购买Resharper。我不能相信在过去的5年里,我一直手动编写大型构造函数时根本不需要这样做。啊!
在VS2019中有效。