Вот простая форма того, что я использую сейчас.
public class Connectable {
public List<A> connectedA;
public List<B> connectedB;
public void Connectable()
{
connectedA = new List<A>();
connectedB = new List<B>();
}
public void AddConnection(Connectable otherConnectable)
{
if (otherConnectable is A) {
A a = (A)otherConnectable;
connectedA.Add(a);
}
else if (otherConnectable is B) {
B b = (B)otherConnectable;
connectedB.Add(b);
}
}
}
public class A : Connectable {
}
public class B : Connectable {
}
Есть ли способ улучшить функцию AddConnection путем ее автоматического трансляции или что-то еще?
Я ищу способ заменить его на:
public void AddConnection(A a){
connectedA.Add(a);
}
public void AddConnection(B b){
connectedB.Add(b);
}
и использовать его через ключевое слово autocast, если что-то подобное существует.
A a=new A();
B b=new B();
A.AddConnection(autocast B);
B.AddConnection(autocast A);
Пожалуйста, предоставьте любые другие советы по улучшению моего текущего кода, если он плохой.
Обновление: я должен упомянуть, что я хотел сохранить 2 отдельных Списка в каждом классе, т.е. класс A будет иметь список A и B, а класс B также будет иметь списки A и B. Учитывая, пары AA, AB, BA ИЛИ BB, они добавляются друг к другу в Список. Я использую их в игровом движке. Лог c - это А, реагирует с подключенными А и Б разными способами. То же самое касается B. Он также реагирует с подключенными A и B.
Кроме того, это имя класса было IConnectable, потому что я первоначально использовал интерфейс, а затем изменил его на class. Исправлено сейчас. Ничего, кроме опечатки.
Пока что использование OfType вместе с одним списком (ответ @ patrick-magee), кажется, лучше всего соответствует тому, что я ищу.