Как сделать наследование от нескольких классов в C#? Здравствуйте.
Все классы должны иметь базовый класс MyBaseClass, чтобы они имели поле BaseObject типа Т и хранили там значения своих полей.
Но при наследовании, как в случае с FakeClass2, он наследуется от FakeClass1, а BaseObject у него должен быть типа RealClassForFakeClass2.
Возможно ли такое реализовать?
На сколько я понимаю, возможно унаследоваться от FakeClass1, а BaseObject перекрыть в самом классе, но хотелось бы, чтобы можно было как-то без перекрытия в самом классе реализовать такой подход или через MyBaseClass или ещё как-то.public class MyBaseClass
where T : class, new()
{
protected T BaseObject = default(T);
public T getBaseObject()
{
return this.BaseObject;
}
}
public class FakeClass1 : MyBaseClass
{
public string Field1
{
set
{
this.BaseObject.Field1 = value;
}
}
public string Field2
{
set
{
this.BaseObject.Field2 = value;
}
}
}

public class FakeClass2 : FakeClass1, MyBaseClass ////error
{
public FakeClassN Field1
{
set
{
this.BaseObject.Field1 = value.getBaseObject();
}
}
}

21 Авг 2019 в 07:04
198 +1
0
Ответы
1

В C# нельзя наследоваться от нескольких классов, но можно реализовать подобное поведение с использованием интерфейсов. В вашем случае, вместо наследования от нескольких классов, вы можете использовать интерфейсы для определения различных типов BaseObject.

Примерно так:

public interface IBaseClass<T>
where T : class, new()
{
T GetBaseObject();
}
public class MyBaseClass<T> : IBaseClass<T>
where T : class, new()
{
protected T BaseObject = default(T);
public T GetBaseObject()
{
return this.BaseObject;
}
}
public class FakeClass1 : MyBaseClass<RealClassForFakeClass1>
{
public string Field1
{
set
{
this.BaseObject.Field1 = value;
}
}
public string Field2
{
set
{
this.BaseObject.Field2 = value;
}
}
}
public class FakeClass2 : FakeClass1, IBaseClass<RealClassForFakeClass2>
{
public new RealClassForFakeClass2 GetBaseObject()
{
return this.BaseObject as RealClassForFakeClass2;
}
public FakeClassN Field1
{
set
{
this.BaseObject.Field1 = value.GetBaseObject();
}
}
}

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

20 Апр 2024 в 13:08
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир