public abstract class A
{
public A()
{
Console.WriteLine('A');
}
public virtual void Fun()
{
Console.WriteLine("A.Fun");
}
}
public class B : A
{
public B()
{
Console.WriteLine('B');
}
////定义为抽象类则不能被使用
//public override void Fun()
//{
// //base.Fun();
// Console.WriteLine("B.Fun()");
//}
public new void Fun()
{
Console.WriteLine("B.Fun()");
}
public static void Main()
{
A a = new B();
a.Fun();//调用基类的虚函数
/*
前提:A是B的父类。
A a = new B();
这一句的过程是这样的,
1)创建一个类A的引用a
2)创建一个类B的实例
3)把类B的引用赋值给a
内存里只有一个B的实例。
如果你调用了类A中被类B重写的方法,那么得到的效果是你调用了这个已经被B重写的方法。
如果A是抽象类的有虚方法,子类隐藏基类的方法,则调用父类的同名方法
* */
//A a = new A();//这样有错,抽象类不能被实例化
//B b = new B();
//b.Fun();//调用子类的虚方法
}
}
}
using System;
using System.Collections.Generic;
using System.Text;
namespace TEST
{
class A
{
public string GetA()
{
return "aa";
}
public virtual string GetAB()
{
return "aabb";
}
}
class B : A, IMyInterface
{
public string GetB()
{
return "bb";
}
public string GetC( string a,string b)
{
return a+" "+b;
}
public string GetC()
{
return "www.wsoft.net";
}
public string GetC(string name)
{
return name;
}
public override string GetAB()
{
return "bbaa";
}
}
class Program
{
static void Main(string[] args)
{
A a = new B();
B b = new B();
//调用继承后的方法
System.Console.WriteLine(a.GetA());
//调用重写方法
System.Console.WriteLine(a.GetAB());
//调用接口
System.Console.WriteLine(b.GetC("Super"));
//调用有参数的方法
System.Console.WriteLine(b.GetC("My name is ","super"));
//调用无参数的方法
System.Console.WriteLine(b.GetC());
//调用委托
PrintStr myPrint = new PrintStr();
PrintHandler myHandler = null;
myHandler += new PrintHandler(myPrint.CallPrint); // 将委托链接到方法,来实例化委托
if (myHandler != null) myHandler("Hello World!"); // 调用委托,相当于匿名调用委托所链接的方法
System.Console.ReadLine();
}
}
//写义接口类
public interface IMyInterface
{
//声明接口方法
string GetC(string name);
}
#region 构造函数
class myResult
{
private string m_Result;
public string Result
{
get {return m_Result;}
set{ m_Result=value;}
}
}
#endregion
public delegate void PrintHandler(string str);// 声明委托类型
public class PrintStr
{
public void CallPrint(string input) //定义委托方法
{
System.Console.WriteLine(input);
}
}
youlxsbobo() ( ) 信誉:100 Blog 加为好友 2007-06-18 08:31:07 得分: 0
那我想请问各位 A a = new B()这个时候系统内存是怎么样分配的?在内存中是否有A的实例?或者说B继承与A,无论是A a = new B();还是B b = new B();都是先在系统内存中先申请A的实例,如果需要B的实例!只是在A内存的基础上进行扩展,不知道小弟这样理解对不对?
还有很多地方不清楚的,还望各位指点。
---------------------
这问题我也想知道,前不久有人法帖问。
B b = new B();
系统内有没有A的实例,如果有,如何访问。
那我想请问各位 A a = new B()这个时候系统内存是怎么样分配的?在内存中是否有A的实例?或者说B继承与A,无论是A a = new B();还是B b = new B();都是先在系统内存中先申请A的实例,如果需要B的实例!只是在A内存的基础上进行扩展,不知道小弟这样理解对不对?
还有很多地方不清楚的,还望各位指点。