2017-01-08 1 views
-2

일반적으로 C#의 생성자는 이미 존재하는 심볼에 많은 할당을 반복합니다. 예를 들어C# 생성자 기본 인수

:

class P{ 
    int x; 
    int y; 
    int z; 
    P(int x,int y,int z,...) 
    { 
     this.x=x; 
     this.y=y; 
     this.z=z; 
     /... 
    } 
} 

는 같은 이름의 필드 생성자 입력을 할당하는 기본 방법이 있나요. 모든 클래스에 대해이 1 대 1 맵을 다시 구현하는 것은 의미가 없습니다.

+4

가능한 [변수가있는 생성자를 생성하는 바로 가기 (C# VS2010)] (http://stackoverflow.com/questions/8893979/shortcut-for-creating-constructor-with-variables-c-vs2010)의 가능한 복제본 –

답변

0

현재로서는 불가능합니다.

그러나 C# 백 로그에는 Records이라는 기능이 있습니다. 비록 우리가 C# 7에서 그것을 볼 지 확신 할 수는 없지만 레코드 유형은 생성자 인수가 자동으로 할당되는 속성 집합을 사용하여 클래스의 한 줄 정의를 허용합니다. 예 :

public class Point 
{ 
    public int X { get; } 
    public int Y { get; } 

    public Point(int x, int y) 
    { 
     X = x; 
     Y = y; 
    } 

    // plus Equals, GetHashCode, With 
} 
0

과 동일

public class Point(int X, int Y); 

하지 (내가 제대로 이해한다면) 당신이 생각하는 방법이다. 생성자에 대한 매개 변수의 이름과 필드/속성의 이름은 실제로 인간을위한 편리한 레이블입니다. 클래스는 독립적이어야하며 클래스를 캡슐화해야합니다. 심지어 컴파일러 옵션이 외부 (전달 된) 이름을 내부의 것과 혼동하게 만들 수도 있습니다.

당신은 같은 일을 수행 할 수 있습니다

public 생성자가 (마지막 foo는 생성자처럼) 일부 작업을 수행하는 개인 생성자 (또는 다른 public 생성자)를 사용
public class foo { 
    public int X { get; set; } 
    public string Y { get { return X.ToString(); } } 
    public double Z { get; private set; } 
    private foo(int x) { X = x; } 
    public foo(int x, string y, double z = 1.0): this(x) { 
     Z = z; 
     } 
    } 

. 그리고 선택적 매개 변수를 사용합니다 (마지막 foo 생성자에서 z를 보는 것처럼).