C# 如果一个类中有许多属性,那么创建defaultconstructor的简单方法是什么?
如果我有一个具有很多属性的类,并且我想创建一个具有所有这些属性的构造函数,那么我必须键入很多。在C#4.0中有没有更聪明的方法来实现这一点C# 如果一个类中有许多属性,那么创建defaultconstructor的简单方法是什么?,c#,.net,constructor,C#,.net,Constructor,如果我有一个具有很多属性的类,并且我想创建一个具有所有这些属性的构造函数,那么我必须键入很多。在C#4.0中有没有更聪明的方法来实现这一点 class MyClass { public string A{get;set;} public string B{get;set;} public string C{get;set;} public string D{get;set;} public string E{get;set;} public string F{get;se
class MyClass {
public string A{get;set;}
public string B{get;set;}
public string C{get;set;}
public string D{get;set;}
public string E{get;set;}
public string F{get;set;}
public string G{get;set;}
//and so on...
public MyClass(string a, string b, string c /*and so on...*/)
{
this.A = a;
this.B = b;
this.C = c;
//...
}
}
我想强制用户创建一个包含所有属性的对象。我刚才问了一个类似的问题: 简而言之,没有多少人支持让它看起来更漂亮或更容易创建。解决方案永远不会“解决”问题,它们只会将问题转移到另一个地方或绕过它
首先要看的是类是否真的需要这么多的状态。这个班做得太多了吗?它能被分解成更简单的类吗?这并不总是可能的,有时你只是简单地拥有很多构造函数参数的类。我刚才问了一个类似的问题: 简而言之,没有多少人支持让它看起来更漂亮或更容易创建。解决方案永远不会“解决”问题,它们只会将问题转移到另一个地方或绕过它
首先要看的是类是否真的需要这么多的状态。这个班做得太多了吗?它能被分解成更简单的类吗?这并不总是可能的,有时您只是拥有许多构造函数参数的类。如果您使用的是.Net4.0,则可以使用
命名参数
大概是这样的:
class Person
{
public long Age { get; set; }
public string Name { get; set; }
public double Salary { get; set; }
public Person(int age=22,string name="Ram",int salary=9000)
{
Age = age;
Name = name;
Salary = salary;
}
}
如果您使用的是.Net4.0,则可以使用命名参数
大概是这样的:
class Person
{
public long Age { get; set; }
public string Name { get; set; }
public double Salary { get; set; }
public Person(int age=22,string name="Ram",int salary=9000)
{
Age = age;
Name = name;
Salary = salary;
}
}
如果您安装了,其中一个重构工具允许您“生成构造函数”。向导将为您提供一个属性列表,您可以选择要包含哪些属性
不,我与Jetbrains没有任何关系,我只是使用R#并发现它是一个非常宝贵的工具。如果您安装,其中一个重构工具允许您“生成构造函数”。向导会提供一个属性列表,您可以选择要包含哪些属性
不,我与Jetbrains没有任何关系,我只是使用R#并发现它是一个非常宝贵的工具。重复使用它听起来不太友好。既然它们是读写的,为什么不让调用方使用对象初始值设定项语法呢?i、 e.只是新的MyClass{A=“abc”,F=“def”}
?我认为“更聪明”的方法是:不要那样做。只要有一个无参数构造函数,让调用者随心所欲就行了。这里有一个想法:使这个类成为局部类,并添加一个像[FullConstructor]这样的属性。添加一个T4模板,该模板将扫描项目中的此类类,并在单独的文件中为它们生成构造函数。@MarcGravel你是说我不应该在类中生成任何构造函数吗?如果我想创建一个对象,只需使用new MyClass{A..}?@Miri Marc建议的唯一缺点是它不会“强制”设置所有属性。重复设置听起来对调用方不太友好。既然它们是读写的,为什么不让调用方使用对象初始值设定项语法呢?i、 e.只是新的MyClass{A=“abc”,F=“def”}
?我认为“更聪明”的方法是:不要那样做。只要有一个无参数构造函数,让调用者随心所欲就行了。这里有一个想法:使这个类成为局部类,并添加一个像[FullConstructor]这样的属性。添加一个T4模板,该模板将扫描项目中的此类类,并在单独的文件中为它们生成构造函数。@MarcGravel你是说我不应该在类中生成任何构造函数吗?如果我想创建一个对象,只需使用newmyclass{A..}?@Miri Marc建议的唯一缺点是它不会“强制”要设置所有属性。您将如何强制对象创建者为所有属性分配值?@miri解析命名参数将在编译时发生,而性能不受影响。您将如何强制对象创建者为所有属性分配值?@miri解析命名参数将在编译时发生,其中性能不是一个问题。好东西,太糟糕了,这只是一次尝试:(好东西,太糟糕了,这只是一次尝试:(