2017-01-08 7 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; 
     /... 
    } 
} 

Есть ли способ по умолчанию назначить конструктор входов для полей одного и того же имени. Нет смысла переопределять эту карту один-один для каждого класса.

+4

Возможный дубликат [Ярлык для создания конструктора с переменными (C# VS2010)] (http://stackoverflow.com/questions/8893979/shortcut-for-creating-constructor-with-variables-c-vs2010) –

ответ

0

В настоящее время это невозможно.

Но есть функция в C# backlog под названием Records. Хотя я не уверен, увидим ли мы это в C# 7. Типы записей позволяют однострочное определение классов с набором свойств, которые автоматически будут назначены аргументами конструктора. Например.

public class Point(int X, int Y); 

Что же, как

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 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 в последнем конструкторе foo).