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

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

我在代码的某处用到一个方法function1(children c),想传入一个子类对象。
function1是这么实现的:
function1(parent p)//参数这里写父类的类型可以吗?
{
//能在这里判断传入的是那个子类吗?因为我想针对每个子类分别做处理
//比如,我在这里想调用子类的age属性,没法调用
}
...全文
461 12 打赏 收藏 转发到动态 举报
AI 作业
写回复
用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
  • 打赏
  • 举报
回复
既然希望为不同子类提供不同的函数实现,那就应该果断上重载。
  • 打赏
  • 举报
回复
既然你要修改子类的属性,为什么还要牵强的用父类所谓方法参数
资源下载链接为: https://pan.quark.cn/s/9e7ef05254f8 在 Python 生态中,pip 和 conda 是常用的库管理与安装工具。但因网络状况,在国内直接连官方仓库常会速度慢甚至连不上。为改善此状况,可切换到国内镜像服务器,如清华 TUNA 的镜像服务,以下分别介绍 pip 和 conda 的配置方法。 对于 conda,首先它是一个含丰富 Python 包及环境管理功能的流行科学计算平台。要更换国内源,可去清华 TUNA 的镜像站下载安装包,其也提供了 Anaconda 仓库及第三方源镜像。在 Linux 或 Mac 系统,可在用户目录下创建或编辑 .condarc 文件,文件内容如下: Windows 用户因系统限制无法直接创建以 . 开头的文件名,可通过运行 conda config --set show_channel_urls yes 来生成 .condarc 文件,再按上述内容编辑。之后执行 conda clean -i 清除索引缓存,以确保使用镜像站索引。最后用 conda create -n myenv numpy 命令测试配置是否成功。 对于 pip,临时更换源可在 pip install 命令时加 -i 参数指定源,如 pip install scrapy -i https://pypi.tuna.tsinghua.edu.cn/simple 。永久更换源,Linux 系统在 ~/.pip/pip.conf(无则创建)中添加以下内容: Windows 和 Mac 用户分别在 %USERPROFILE%\pip\pip.ini(Windows)或 $HOME/Library/Application Support/pip/pip.conf(Mac)中进行相同配置。 通过上述步骤,能提高 pip 和 conda 在国内的安

111,092

社区成员

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

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

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