Я не уверен, что заголовок путается, не стесняйтесь его редактировать.Получите экземпляр текущего абстрактного класса и используйте экземпляр для вызова определенных свойств дочернего класса в C#
У меня есть следующий код
public abstract class A
{
public int P1 {get; set;}
}
public class B : A
{
public int p2 {get; set;}
}
public class C : A
{
public int p2 {get; set;}
}
public class test
{
A a = null;
public test(A a1)
{
a = a1;
}
public void foo()
{
if((a as B)!=null)
{
(a as B).p2 = 1;
}
else if ((a as C)!=null)
{
(a as C).p2 = 2;
}
}
}
P2 doen't не существует в абстрактном классе только некоторые наследование класса будет иметь его. Для установки этого свойства мне нужно проверить, имеет ли текущий экземпляр тип Class B или C, и я установил свойство. Каждый раз, когда я добавлю класс, который имеет это свойство, мне нужно добавить чек для него. Есть ли способ только захватить экземпляр и проверить, существует ли P2, чем установить его, не проверяя каждый тип.
Благодаря
, если Р2 является экземпляром другого класса, как, например, общественного ClassType P2 {получить, установить;} с помощью отражения, как вызвать метод из P2, как P2.F00() –
Еогеаспа (VAR свойство в A.GetType () .GetProperties()) {if (property.Name == "p2") {property.Foo() ??? }} –
Вам нужно будет получить значение из этого свойства и применить его к правильному типу, или использовать отражение и/или 'dynamic' _again_. –