У меня есть класс, в котором есть еще класс..
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, но вдруг есть более изящное решение..
C#
C# создание экземпляра класса с вложенным классом
Можно конечно сделать так:
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
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
Похожие вопросы
- Зачем разбивать код в C# на отдельные классы?
- C# разница между созданием объекта родительского и производного класса.
- Базовые классы C# Нужен код такой большой
- Можете объяснить по постому про создание классов?
- Разработка структуры класса
- Задание. В классе Program напишите следующие методы и вызовите их в главном методе Main:
- Стоит ли дальше учить C#?
- Программирование на C Sharp (C#)
- Сегодня начал учить c#, решил сделать калькулятор простой и столкнулся с такой ошибкой при компиляции, хелпуйте.
- Что лучше C# или C++?
Это классно так создавать, когда в классе 2-3 переменные, но у меня в классе их 13 штук.. Строка создания через метод выйдет длиной в 2 экрана) И это мне еще также второй вложенный класс нужно забить, в котором еще 18 переменных..
Похоже, проще создать отдельно экземпляры внутренних классов, а потом присвоить их значения:
Order.Customer _customer = new Order.Customer
{
Name = "ffff",
ID = "ffsgr"
}
_order.Customer = _customer;
Так как-то более читабельно получится, не будет строчек по 2-3 экрана вправо, которые нечитабельны от слова "совсем"))
За труды спасибо) Но, я думаю, вы и сами понимаете, что при большом количестве переменных это изврат в обоих случаях)