C#

C# создание экземпляра класса с вложенным классом

У меня есть класс, в котором есть еще класс..

public class Order
{

public string id;
public string date;

public class Customer
{
public string Name;
public string ID;
}

}

При создании экземпляра класса Order я могу сделать так:

Order _order = new Order
{
id = "1",
date = "11.11.1111"
}

Но значения для переменных вложенного класса Customer я могу назначить только отдельными строчками типа:

_order.Customer.Name = "Рога и Копыта";
_order.Customer.ID = "11342";

Есть ли какой-то способ добавлять значения переменных вложенного класса Customer также, как и значения переменных основного класса Order?

Да, можно создать экземпляр вложенного класса Customer, а потом присвоить его значение экземпляру _order.Customer, но вдруг есть более изящное решение..
Sergey Garshenin
Sergey Garshenin
10 661
Можно конечно сделать так:
using System;

namespace SharpTest
{
  public class Order
  {
    public class Customer
    {
      public string Name = "";
      public string ID = "";
    }
    public string id;
    public string date;
    public string Name
    {
      get => cmr.Name;
      set => cmr.Name = value;
    }
    public string ID
    {
      get => cmr.ID;
      set => cmr.ID = value;
    }
    private Customer cmr;
    public void SetCustomer(string _ID, string _Name)
    {
      ID = _ID;
      Name = _Name;
    }
    public Order(string id, string date, string ID, string Name)
    {
      cmr = new Customer();
      this.id = id;
      this.date = date;
      this.Name = Name;
      this.ID = ID;
    }
  }
  class Program
  {
    static void Main(string[] args)
    {
      Order o = new Order("id", "date", "ID", "Name");
      Console.WriteLine("{0} {1} {2} {3}", o.id, o.date, o.ID, o.Name);
      o.SetCustomer("123", "456");
      Console.WriteLine("{0} {1} {2} {3}", o.id, o.date, o.ID, o.Name);
      Console.ReadKey();
    }
  }
}

Но это изврат! Так сделай:
using System;

namespace SharpTest
{
  public class Customer
  {
    public string Name = "";
    public string ID = "";
  }
  public class Order: Customer
  {
    public string id;
    public string date;
    public void SetCustomer(string _ID, string _Name)
    {
      ID = _ID;
      Name = _Name;
    }
    public Order(string id, string date, string ID, string Name)
    {
      this.id = id;
      this.date = date;
      this.Name = Name;
      this.ID = ID;
    }
  }
  class Program
  {
    static void Main(string[] args)
    {
      Order o = new Order("id", "date", "ID", "Name");
      Console.WriteLine("{0} {1} {2} {3}", o.id, o.date, o.ID, o.Name);
      o.SetCustomer("123", "456");
      Console.WriteLine("{0} {1} {2} {3}", o.id, o.date, o.ID, o.Name);
      Console.ReadKey();
    }
  }
}

PS: код рабочий, SetCustomer для наглядности.
В итоге создаём родительский класс с нужными нам параметрами и тупо создаём потомка. У потомка будет доступно то же самое. И, главное, никакого изврата с get-set
ЖС
Жасурбек Султанов
71 781
Лучший ответ
Sergey Garshenin Пасиб конечно)) Но второй вариант тоже в какой-то мере изврат))
Это классно так создавать, когда в классе 2-3 переменные, но у меня в классе их 13 штук.. Строка создания через метод выйдет длиной в 2 экрана) И это мне еще также второй вложенный класс нужно забить, в котором еще 18 переменных..

Похоже, проще создать отдельно экземпляры внутренних классов, а потом присвоить их значения:

Order.Customer _customer = new Order.Customer
{
Name = "ffff",
ID = "ffsgr"
}

_order.Customer = _customer;

Так как-то более читабельно получится, не будет строчек по 2-3 экрана вправо, которые нечитабельны от слова "совсем"))

За труды спасибо) Но, я думаю, вы и сами понимаете, что при большом количестве переменных это изврат в обоих случаях)