Как сделать наследование от нескольких классов в 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
161 +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 Апр в 13:08
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 84 134 авторам
Первые отклики появятся уже в течение 10 минут
Прямой эфир