Вопрос по постройке класса

Есть например 4 класса TransportnoeSredstvo, Sobstvennik, FizLico, UyrLico

Вот как правильно построить класс Sobstvennik так:

Чтобы у #1 экземпляра TransportnoeSredstvo, Sobstvennik был FizLico.

А у #2 экземпляра TransportnoeSredstvo Sobstvennik был UyrLico

Просто делать у Sobstvennik 2 свойства FizLico и UyrLico, а затем одно из них использовать, а другое оставлять null ?

Или можно как то грамотнее ?

class Sobstvennik
{
    public FizLico FizLico { get; set; }

    public YurLico YurLico { get; set; }
}

Ответы (1 шт):

Автор решения: aepot

Как же тяжело читать транслитерацию.

Sobstvennik = VehicleOwner
TransportnoeSredstvo = Vehicle
FizLico = Individual
UyrLico = Organisation

Вас спасет второй принцип ООП - наследование.

К примеру, можно создать базовый класс Client

// abstract в частности дает понять, что экземпляры этого типа создавать не следует и запрещает это делать
public abstract class Client 
{
    public string Name { get; set; }
    public long Inn { get; set; }
}

И унаследоваться от него.

public class Individual : Client
{
    public string HomeAddress { get; set; }
}

public class Organisation : Client
{
    public string OfficeAddress { get; set; }
}

Тогда код получится такой

public class VehicleOwner
{
    public Client Client { get; set; }
    public Vehicle Vehicle { get; set; }
}

А определить реальный тип клиента можно так

if (vehicleOwner.Client is Individual individual)
{
    Console.WriteLine(individual.HomeAddress);
}

Либо так

switch (vehicleOwner.Client)
{
    case Individual individual:
        Console.WriteLine(individual.HomeAddress);
        break;
}

Это просто как пример, быть может я не до конца понял, какая именно структура данных вам нужна, но основные приниципы наследования от этого не меняются.

→ Ссылка