c#继承与多态的问题

书农 2018-01-10 10:59:03
直接上代码



public class resultObj{
pubilc string name{get;set;}
public string data{get;set;}

public class resultObj<T> :resultObj
{
public resultObj(T data){
this.Data =data;
}
public T Data{get;set;}
public string tempStr ="测试";
public void getStr(){};

}
class Program
{
static void Main(string[] args)
{
//父类指向子类的实例
resultObj f = new ResultObjce<string>("我是子类");

//问题1:f虽然不能调用子类的方法,但是通过调试 f中包含有子类的属性Data(父类中并没有Data属性?为什么在调式中f中有Data和tempStr ,但是没有getStr()方法)
//问题2:f中没有方法的指针。比如getStr();
//问题3: 父类指向子类的实例的具体用途,请大神给个简易的例子解释一下
}
}





...全文
113 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
wanghui0380 2018-01-10
  • 打赏
  • 举报
回复
具体请百度“虚拟方法表”--估计你可以找到c++方面的资料。当然net这里其实一样 一个对象实例,会根据你等号左边的类型,套用对应的方法表。 至于调试,那是调试。微软的可视化调试器,会直接使用等号右边的。(既然是调试,调试就是给程序员用的,如果调试的时候我都不知道他实际是那个对象实例,不是麻烦了,我后面都不知道要as成什么东西) 至于第3个问题,你看微软的事件就明白了,微软的事件发给你的就是一个object,一个EventArgs,好吧。这个就例子。因为在抽象成面的设计,需要只管抽象,微软可不知道你后面扩展了多少个object类的继承体,也不管你继承了多少个EventArgs,他在抽象事件的时候,只会面对最顶级的抽象。
书农 2018-01-10
  • 打赏
  • 举报
回复
谢谢老师回复,非常感谢
书农 2018-01-10
  • 打赏
  • 举报
回复
引用 1 楼 starfd 的回复:
你声明的是父类,但你实际new的是子类,所以你在debug时能看到它内部其实就是子类,但你在用的时候,因为你声明的是父类,所以你只能使用父类公开的东西,不能直接使用子类的东西,除非你强制转化为子类
首先谢谢老师,我其实也是这样理解的,主要是因为我在子类中添加了一个方法,然后发现子类实例后没有出现,所以有点疑惑,为什么方法没有出现在实例中?
  • 打赏
  • 举报
回复
debug什么时候可以看到方法了?我怎么从来都是只能看到字段和属性,难道是我看的姿势不对
  • 打赏
  • 举报
回复
你声明的是父类,但你实际new的是子类,所以你在debug时能看到它内部其实就是子类,但你在用的时候,因为你声明的是父类,所以你只能使用父类公开的东西,不能直接使用子类的东西,除非你强制转化为子类

110,537

社区成员

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

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

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