给方法传入一个子类,如何判断是哪个子类,到底是用泛型还是用什么实现?

heavenmirror 2012-09-25 09:33:08
class parent
{
string name;
}
class children : parent
{
int age;
}

我在代码的某处用到一个方法function1(children c),想传入一个子类对象。
function1是这么实现的:
function1(parent p)//参数这里写父类的类型可以吗?
{
//能在这里判断传入的是那个子类吗?因为我想针对每个子类分别做处理
//比如,我在这里想调用子类的age属性,没法调用
}
...全文
411 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
hztltgg 2012-09-25
  • 打赏
  • 举报
回复
如果是新手,我觉得你的需求不是你提到问题。

父类不可以也不需要知道子类的细节,你想知道子类的细节,设计就有问题了
北京的雾霾天 2012-09-25
  • 打赏
  • 举报
回复

if (p.GetType()==typeof(children)
{

}
else if (p.GetType()==typeof(...))
{
}
else
{

}/
种草德鲁伊 2012-09-25
  • 打赏
  • 举报
回复


function1(parent p)//参数这里写父类的类型可以吗?
{
//能在这里判断传入的是那个子类吗?因为我想针对每个子类分别做处理
//比如,我在这里想调用子类的age属性,没法调用
}



大多数情况都是很糟糕的设计
heavenmirror 2012-09-25
  • 打赏
  • 举报
回复
恩,谢谢,但我就是不知道怎么调用子类的age属性,麻烦您给说一下
[Quote=引用 5 楼 的回复:]
你可以获取该类真实的名称进行判断,也可以使用is 或者 as操作符进行判断
[/Quote]
heavenmirror 2012-09-25
  • 打赏
  • 举报
回复
哥,我真是个新手,麻烦您具体点呗
[Quote=引用 4 楼 的回复:]
提示 简单工厂
[/Quote]
isjoe 2012-09-25
  • 打赏
  • 举报
回复
你可以获取该类真实的名称进行判断,也可以使用is 或者 as操作符进行判断
超级大咸鱼 2012-09-25
  • 打赏
  • 举报
回复
提示 简单工厂
heavenmirror 2012-09-25
  • 打赏
  • 举报
回复
请问在function1里怎么调用子类的age属性呢,我在function1里写:
p = new children();
然后写p.age 说,没有这个属性啊?

[Quote=引用 2 楼 的回复:]
可以,这是多态,p可以有子类创建

Parent p = new children();

function1(p)
[/Quote]
bdmh 2012-09-25
  • 打赏
  • 举报
回复
可以,这是多态,p可以有子类创建

Parent p = new children();

function1(p)
真相重于对错 2012-09-25
  • 打赏
  • 举报
回复
virtual
iyomumx 2012-09-25
  • 打赏
  • 举报
回复
既然希望为不同子类提供不同的函数实现,那就应该果断上重载。
  • 打赏
  • 举报
回复
既然你要修改子类的属性,为什么还要牵强的用父类所谓方法参数

110,926

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧