如何动态将object转换成自己想要的类
publicclassA{publicvoidEat(){}}publicclassB{publicvoidEat(){}}publicvoidC{Aa=newA();B...
public class A
{
public void Eat(){}
}
public class B
{
public void Eat(){}
}
public void C
{
A a=new A();
B b=new B();
SortedList sl=new SortedList ();
sl.Add(1,a);
sl.Add(2,b);
sl.GetByIndex(1).Eat();//这里就会出错,如何能自动调用Eat(),不用判断Get出来的是哪种类,而不是((A)sl.GetByIndex(1)).Eat();要能够自动判断
} 展开
{
public void Eat(){}
}
public class B
{
public void Eat(){}
}
public void C
{
A a=new A();
B b=new B();
SortedList sl=new SortedList ();
sl.Add(1,a);
sl.Add(2,b);
sl.GetByIndex(1).Eat();//这里就会出错,如何能自动调用Eat(),不用判断Get出来的是哪种类,而不是((A)sl.GetByIndex(1)).Eat();要能够自动判断
} 展开
2个回答
展开全部
多态啊,用接口。声明一个接口变量=子类对象。直接调用接口变量就ok,不需要判断,因为这是多态。
IEat i=new A();
i.Eat(); 它会调用A里面的Eat()。
IEat i=new A();
i.Eat(); 它会调用A里面的Eat()。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
有个简单的办法,让A,B都继承自某种包含Eat方法的基类。还有,你的有序集合要声明为SortedList<int,基类>。还有上面void C后面应该有括号,你复制时候竟然不见了?怀疑你自己测试运行没有。
追问
这段代码是现编的,实际代码远远比这个复杂的多,而基类的方法也不行,因为类A和类B仅有少数两个方法是一样的,绝大部分是不同的,因为实际代码是有8个类,50多个方法,大部分都不一样。请问还有没有其他的好方法?
追答
那就用接口。最直接的下面的方法
object o = sl[1];
if (o is A)
(o as A).Eat();
else if (o is B)
(o as B).Eat();
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询