Здравствуйте, у меня возникли трудности с настройкой класса из-за соответствующих типов. Вот идея:Функции и типы шаблонов в C#
класс А имеет частный ArrayList, который, как предполагается, должны быть заполнены с экземплярами класса В. Таким образом, любой экземпляр класса А будет иметь на ArrayList элементов класса B. класс A имеет функцию, которая добавляет в свой ArrayList новый экземпляр B. Чтобы быть более конкретным, внутри A.Add создается новый B и инициализируется, а затем добавляется в ArrayList. класс B - очень простой класс: он содержит один enum Введите его, и он должен также содержать ссылку на внешний объект/класс или что-то еще. Предположим, что есть классы * appleClass, peachClass, lemonClass * и classB - класс фруктов, а класс A - это плод. Каждый раз, когда основной код видит фрукты, он должен попросить класс А добавить его в корзину. это означает, что A.add (thisfruit), но этот фрукт может быть любым фруктовым классом. что в свою очередь означает, что мне нужна общая подпись для создания экземпляра класса B и добавление его в A.arraylist. Я не знаю, имею ли я смысл, но я также попытаюсь дать некоторый код, чтобы объяснить мою проблему.
class Lemon
{
//....
}
class Apple
{
//....
}
class Peach
{
//....
}
class Fruit
{
public int color;
<T> fruit;///this should be the <T> type depending on the fruit class i am adding
public Fruit(T f, int c){fruit = f; color = c;}
}
class Basket
{
ArrayList FruitArray= new ArrayList();
public void AddFruit<T>(T f,int c)
{
fru = new Fruit(f,c);
FruitArray.Add(fru);
}
}
SomeКак использовать шаблоны ?? Я знаю, что код выше неправильный, но я не могу понять, как это лучше всего сделать.
Спасибо
Alex
EDIT Спасибо всем за ответы. Все они, похоже, указывают на использование базового/абстрактного класса Fruit и получают от него определенные плоды. Мне жаль говорить вам, что мой актуарийный проект не связан с фруктами, я просто использовал их для простоты. Фактический проект находится в Unity и somr из «фруктов» поступают из классов Unity, некоторые другие «Фрукты» - это мои собственные классы. это означает, что я не могу объявить родительский класс для тех, которые приходят из пространства имен Unity. Я больше надеялся, что у меня будет общая ссылка на «плод», это будет пустой указатель на старый добрый C. Я знаю, что C# строго типизирован и не позволит использовать большинство указателей, но должен мне путь, чтобы пройти «неизвестное» ссылка-объект для класса/функции и использования/разрешить его позже ...
Thank you @BlackBear для ответа. Другое дело: если я использую этот способ, вы предлагаете, когда я вернусь из списка A (в моем основном коде), мне нужно знать точный тип (плод), который есть у каждого элемента. Это будет возможно? Я не хочу просто знать, что это тип «Фрукты». Я хочу, чтобы топ знал, что это лимон или яблоко. пример: Список a = Basket.GetFruits(); переключатель (a [0] .c) { case 0: { Lemon L = a [0] .f; // заполнять это будет нормально ??? будет ли тип лимона? } // .... –
Sagi2313
@ Sagi2313 уверен, см. Мое редактирование – BlackBear
@ Sagi2313 это заняло у меня некоторое время, но вы все равно можете делать то, что хотите, и не слишком много головных болей. См. Мое редактирование, пожалуйста, – BlackBear