C # сокращенная запись для создания экземпляра класса - PullRequest
3 голосов
/ 10 мая 2011

Я уверен, что был способ легко создать экземпляр класса, но мой поиск великих сетей не нашел его.Допустим, у меня есть это:

List<LicencedCustomer> leftList = new List<LicencedCustomer>();

leftList.Add(new LicencedCustomer (LMAA_CODE:"1",LICENSE_NUMBER:"1",TRADING_NAME:"Bobs Liquor",STATE:"NSW",POSTCODE:"2261"));

Мой класс выглядит следующим образом.

public class LicencedCustomer
{

    public string LMAA_CODE {get; set;}
    public string LICENSE_NUMBER {get; set;}
    public string TRADING_NAME {get; set;}
    public string STATE  {get; set;}
    public string POSTCODE  {get; set;}

    public LicencedCustomer(string LMAA_CODE, string LICENSE_NUMBER, string TRADING_NAME, string STATE, string POSTCODE)
    {
        this.LMAA_CODE = LMAA_CODE;
        this.LICENSE_NUMBER = LICENSE_NUMBER;
        this.TRADING_NAME = TRADING_NAME;
        this.STATE = STATE;
        this.POSTCODE = POSTCODE;
    }

    ...

Без конструктора, показанного выше, я получаю ошибку, что класс не содержит конструктораэто берет 5 аргументов (изначально я пробовал это только со значениями и без имен полей в функции List.Add).

Есть ли ярлык, позволяющий присваивать свойства при создании, без необходимости явно определять конструктор?

Спасибо!

РЕДАКТИРОВАТЬ: широкое любопытство стало результатом использования заглавных букв свойств - они только так, потому что они были созданы для отражения заголовков файла импорта.Не мой предпочтительный метод!

Ответы [ 2 ]

4 голосов
/ 10 мая 2011

Когда вы используете new (), вы вызываете конструктор, который соответствует параметрам. Если у вас нет определенных конструкторов, вы получите неявный параметр без конструктора.

Чтобы использовать инициализатор ярлыка, используйте что-то вроде этого.

public class sCls
{
    public int A;
    public string B;

}
static void Main(string[] args)
{
   sCls oCls = new sCls() {A = 4, B = "HI"};
}

Редактировать


Из комментариев, если вы добавляете consturctor, который принимает параметр, вы теряете имплицитный конструктор без параметров

* * 1010

Вы также можете использовать любой конструктор со списком инициализаторов

public class sCls
{
    public sCls(string setB)
    {
        B = setB;
    }
    public int A;
    public string B;

}
static void Main(string[] args)
{
    sCls oCls = new sCls("hi") {A = 4, B = "HI"};
}

Помните, что во всех случаях конструктор вызывается перед списком инициализатора, даже если он имеет конструктор без параметров. Таким образом, конструкции базового класса или все, что происходит в конструкции объекта, произойдет первым.

    public class BSE
    {
        public BSE()
        {
            BaseA = "Bob";
        }
        public string BaseA;
    }
    public class sCls :BSE
    {

        public int A;
        public string B;

    }
static void Main(string[] args)
{
        sCls oCls = new sCls() {A = 4, B = "HI" };
        Console.WriteLine("{0}", oCls.BaseA);//Prints Bob
}
4 голосов
/ 10 мая 2011

Добавьте конструктор по умолчанию, затем попробуйте что-то вроде:

new LicencedCustomer() { LMAA_CODE = ..., LICENSE_NUMBER = ..., ... };

Примечание: обычно капитализировать свойства не принято.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...