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()方法吗?基类不是被派生类的实例赋值了吗?请高手指点啊。 展开
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()方法吗?基类不是被派生类的实例赋值了吗?请高手指点啊。 展开
2个回答
展开全部
你定义了基类的变量mybase 但也只是定义了而已 内存中并有开辟相应的内存空间 必须new 或者把他指向其他空间才能正常使用~所以你没给他赋值或者没new 是不能调用DoSomething()方法的~~
不同的类一般情况下是不能相互赋值的~但是有几个特例,比如 两个是继承关系 子类实例可以给父类变量赋值~或者两个类的实例类型相同等情况~
最后一个问题 ~父类对象不能调用子类的属性方法 子类的对象可以调用父类的属性方法~如果你子类重写了父类的方法 你得到的是子类的方法值 但是你调用的仍然是父类的方法~只不过C#自己发现了重写后的值 取了一下而已。。。
补充一点 你子类没有用override重写方法 不可能得到Derived imp
不同的类一般情况下是不能相互赋值的~但是有几个特例,比如 两个是继承关系 子类实例可以给父类变量赋值~或者两个类的实例类型相同等情况~
最后一个问题 ~父类对象不能调用子类的属性方法 子类的对象可以调用父类的属性方法~如果你子类重写了父类的方法 你得到的是子类的方法值 但是你调用的仍然是父类的方法~只不过C#自己发现了重写后的值 取了一下而已。。。
补充一点 你子类没有用override重写方法 不可能得到Derived imp
展开全部
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
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
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询