如何动态将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();要能够自动判断
}
展开
 我来答
百度网友47aa747
2013-12-11 · TA获得超过503个赞
知道小有建树答主
回答量:319
采纳率:0%
帮助的人:179万
展开全部
多态啊,用接口。声明一个接口变量=子类对象。直接调用接口变量就ok,不需要判断,因为这是多态。
IEat i=new A();
i.Eat(); 它会调用A里面的Eat()。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
阳光的雷咩咩
2013-12-11 · TA获得超过1.4万个赞
知道大有可为答主
回答量:2.3万
采纳率:66%
帮助的人:7884万
展开全部
有个简单的办法,让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();
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式