C#类型变量赋值的问题

usingSystem;usingSystem.Collections.Generic;usingSystem.Text;namespaceexercise{classP... using System;
using System.Collections.Generic;
using System.Text;

namespace exercise
{
class Program
{
static void Main(string[] args)
{
MyDerivedClasee myderived = new MyDerivedClasee();
MyBaseClass mybase;
mybase = myderived;
mybase.DoSomething();
mybase.test1();
Console.ReadKey();

}
}
public class MyBaseClass
{
public virtual void DoSomething()
{
Console.WriteLine("Base imp ");
}
}
public class MyDerivedClasee : MyBaseClass
{
new public void DoSomething()
{
Console.WriteLine("Derived imp ");
}
public void test1()
{
Console.WriteLine("方法能否被引用");
}
}

}
我定义了基类的变量mybase,为什么还要把new MyDerivedClass()赋值给他之后mybase才能调用DoSomething()方法呢,两个是不同的名的类啊可以互相赋值吗?new MyDerivedClass()。还有赋值之后我的基类对象mybase不能调用test1()方法吗?基类不是被派生类的实例赋值了吗?请高手指点啊。
展开
 我来答
龙天骑士
2010-09-17 · TA获得超过2534个赞
知道小有建树答主
回答量:554
采纳率:0%
帮助的人:438万
展开全部
你定义了基类的变量mybase 但也只是定义了而已 内存中并有开辟相应的内存空间 必须new 或者把他指向其他空间才能正常使用~所以你没给他赋值或者没new 是不能调用DoSomething()方法的~~
不同的类一般情况下是不能相互赋值的~但是有几个特例,比如 两个是继承关系 子类实例可以给父类变量赋值~或者两个类的实例类型相同等情况~

最后一个问题 ~父类对象不能调用子类的属性方法 子类的对象可以调用父类的属性方法~如果你子类重写了父类的方法 你得到的是子类的方法值 但是你调用的仍然是父类的方法~只不过C#自己发现了重写后的值 取了一下而已。。。

补充一点 你子类没有用override重写方法 不可能得到Derived imp
无尽星空ljm
2010-09-17 · TA获得超过1793个赞
知道小有建树答主
回答量:441
采纳率:0%
帮助的人:0
展开全部
MyDerivedClasee myderived = new MyDerivedClasee();
MyBaseClass mybase;
mybase = myderived;
mybase.DoSomething(); //调用MyBaseClass的DoSomething, 因为MyDerivedClasee中的DoSomething用了new,而不是override,new表示定义了一个与基类完全没关系的同名函数,override表示重写了基类的同名函数,但具有相同意义。
myderived.DoSomething(); //调用MyDerivedClasee的DoSomething
mybase.test1(); //错误,因为基类不认识test1。
(mybase as MyDerivedClasee).test1(); //用as转换后可调用MyDerivedClasee的test1
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式