#c# #generics
#c# #общие
Вопрос:
В настоящее время я работаю над универсальным классом. Я хочу ограничить доступ к некоторым методам при передаче разных типов. Допустим, это выглядит примерно так:
public class MyGeneric<T>
{
public void Foo1(){}
public void Foo2(){}
}
Я, очевидно, могу использовать typeof
оператор для реализации различных поведений, но давайте предположим, что Foo1 считает среднее значение некоторых чисел. Если я передам тип «Student», он может подсчитывать среднее значение оценок. Но, допустим, я передаю «Car», и я не хочу, чтобы он что-либо делал. Иметь его просто там и ничего не делать с этим типом было бы излишним. Есть ли способ полностью ограничить доступ к нему? Спасибо!
Комментарии:
1. в коде, которым вы поделились, метод
Foo
не принимает никаких параметров. Итак, куда вы передадитеStudent
илиCar
? Можете ли вы объяснить проблему с большей ясностью и каким-нибудь более осмысленным кодом?2. Это все ограничения, которые вы можете объявить при работе с универсальными файлами.
3. @ChetanRanpariya передавая тип, я имел в виду объявление объектов MyGeneric<T> с разными типами, передаваемыми вместо «T».
4. Вы можете использовать функцию ограничения Generics, где она ограничит вас использованием только определенного типа как T. Читайте здесь и здесь
Ответ №1:
Вы могли бы использовать абстракцию / наследование для этого. Создание класса
public class MyGeneric<T>
{
public void Foo1(){}
}
который обрабатывает все «глобальные» функции, а затем создает дочерний класс, подобный этому:
public class MyGenericChild<T> : MyGeneric<T> where T : IMyInterface
{
public void Foo2(){}
}
Затем вы можете использовать определенный дочерний элемент для обработки методов, специфичных для конкретного типа.
При необходимости вы могли бы расширить это с помощью заводского шаблона, чтобы восстановить правильный универсальный класс.