Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/jsf/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如果一个类中有许多属性,那么创建defaultconstructor的简单方法是什么?_C#_.net_Constructor - Fatal编程技术网

C# 如果一个类中有许多属性,那么创建defaultconstructor的简单方法是什么?

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

如果我有一个具有很多属性的类,并且我想创建一个具有所有这些属性的构造函数,那么我必须键入很多。在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;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解析命名参数将在编译时发生,其中性能不是一个问题。好东西,太糟糕了,这只是一次尝试:(好东西,太糟糕了,这只是一次尝试:(