C#从入门到精通 类的多态
发表在C#图书答疑
2015-07-10
是否精华
是
否
版块置顶:
是
否
class MyClass1 //自定义类
{
private int x = 0; //定义int类型变量,作为加数
private int y = 0; //定义int类型变量,作为被加数
public int X //加数
{
get
{
return x;
}
set
{
x = value;
}
}
public int Y //被加数
{
get
{
return y;
}
set
{
y=value;
}
}
public virtual int Add() //定义一个virtual类型的方法,以便在子类(派生类)中重写该方法,求和
{
return x + y;
}
}
class MyClass2 : MyClass1 //自定义类,该类继承自MyClass1
{
public override int Add() //重写基类中的虚方法
{
int x = 5;
int y = 7;
return x + y;
}
}
class Program
{
static void Main(string[] args)
{
MyClass2 myclass2 = new MyClass2(); //实例化MyClass2的对象
MyClass1 myclass1 = (MyClass1)myclass2; //使用子类MyClass2实例化基类MyClass1的对象
myclass1.X = 3; //为MyClass1类中的属性赋值
myclass1.Y = 5; //为MyClass1类中的属性赋值
Console.WriteLine(myclass2.Add()); //调用子类中的方法
Console.WriteLine(myclass1.Add()); //同样调用子类(派生类)中的方法
}
}
class MyClass1 //自定义类
{
private int x = 0; //定义int类型变量,作为加数
private int y = 0; //定义int类型变量,作为被加数
public int X //加数
{
get
{
return x;
}
set
{
x = value;
}
}
public int Y //被加数
{
get
{
return y;
}
set
{
y=value;
}
}
public virtual int Add() //定义一个virtual类型的方法,以便在子类(派生类)中重写该方法,求和
{
return x + y;
}
}
class MyClass2 : MyClass1 //自定义类,该类继承自MyClass1
{
public override int Add() //重写基类中的虚方法
{
int x = 5;
int y = 7;
return x + y;
}
}
class Program
{
static void Main(string[] args)
{
MyClass2 myclass2 = new MyClass2(); //实例化MyClass2的对象
MyClass1 myclass1 = (MyClass1)myclass2; //使用子类MyClass2实例化基类MyClass1的对象
myclass1.X = 3; //为MyClass1类中的属性赋值
myclass1.Y = 5; //为MyClass1类中的属性赋值
Console.WriteLine(myclass2.Add()); //调用子类中的方法
Console.WriteLine(myclass1.Add()); //同样调用子类(派生类)中的方法
}
}
为什么两者运行结果不一样
{
private int x = 0; //定义int类型变量,作为加数
private int y = 0; //定义int类型变量,作为被加数
public int X //加数
{
get
{
return x;
}
set
{
x = value;
}
}
public int Y //被加数
{
get
{
return y;
}
set
{
y=value;
}
}
public virtual int Add() //定义一个virtual类型的方法,以便在子类(派生类)中重写该方法,求和
{
return x + y;
}
}
class MyClass2 : MyClass1 //自定义类,该类继承自MyClass1
{
public override int Add() //重写基类中的虚方法
{
int x = 5;
int y = 7;
return x + y;
}
}
class Program
{
static void Main(string[] args)
{
MyClass2 myclass2 = new MyClass2(); //实例化MyClass2的对象
MyClass1 myclass1 = (MyClass1)myclass2; //使用子类MyClass2实例化基类MyClass1的对象
myclass1.X = 3; //为MyClass1类中的属性赋值
myclass1.Y = 5; //为MyClass1类中的属性赋值
Console.WriteLine(myclass2.Add()); //调用子类中的方法
Console.WriteLine(myclass1.Add()); //同样调用子类(派生类)中的方法
}
}
class MyClass1 //自定义类
{
private int x = 0; //定义int类型变量,作为加数
private int y = 0; //定义int类型变量,作为被加数
public int X //加数
{
get
{
return x;
}
set
{
x = value;
}
}
public int Y //被加数
{
get
{
return y;
}
set
{
y=value;
}
}
public virtual int Add() //定义一个virtual类型的方法,以便在子类(派生类)中重写该方法,求和
{
return x + y;
}
}
class MyClass2 : MyClass1 //自定义类,该类继承自MyClass1
{
public override int Add() //重写基类中的虚方法
{
int x = 5;
int y = 7;
return x + y;
}
}
class Program
{
static void Main(string[] args)
{
MyClass2 myclass2 = new MyClass2(); //实例化MyClass2的对象
MyClass1 myclass1 = (MyClass1)myclass2; //使用子类MyClass2实例化基类MyClass1的对象
myclass1.X = 3; //为MyClass1类中的属性赋值
myclass1.Y = 5; //为MyClass1类中的属性赋值
Console.WriteLine(myclass2.Add()); //调用子类中的方法
Console.WriteLine(myclass1.Add()); //同样调用子类(派生类)中的方法
}
}
为什么两者运行结果不一样