Implementing Finalize and Dispose to Clean Up Unmanaged Resources
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpgenref/html/cpconFinalizeDispose.asp
其次我做的一个测试项目,该项目模拟微软对前面我们说的接口以及类的继承和实现:
using System;
namespace WindowsApplication1
{
public interface IDisposable {//模拟IDisposable接口
void Dispose();
}
public interface IComponent : IDisposable {//模拟IComponent接口
}
public class Component : IComponent, IDisposable {//模拟Component类
public void Dispose(){
Console.Write(this.ToString());
}
}
public class Control : Component{//模拟Control类
}
public class MyControl:Control,IDisposable{//模拟你的类
void IDisposable.Dispose(){
}
public new void Dispose(){
}
}
public class test{//测试类
[STAThread]
static void Main(string[] args) {
MyControl ctl = new MyControl();
ctl.Dispose();
}
}
}
我想这种实现方式应该是微软的对现在这几个类的实现方式比较准确的模拟(抛开其他的继承类),
上面的MyControl类我继承了IDisposable接口并在MControl里面显式实现了该接口的方法,同时使用new关键字覆盖了父类Component的方法Dispose()。
这种实现是允许的但是在测试类里面IDisposable的实现是不会被执行的。
所以你在继承Control的时候只要覆盖父类的方法在子类的方法里面显式调用基类的方法就可以了,就向下面:
public class MyControl:Control,IDisposable{
public new void Dispose(){
base.Dispose();
}
}
--------------------------------------------
using System;
//-------------------------------------------------Class Manager
//parent class
abstract class Manager
{
//Method:KickOut
abstract public void KickOut();
};
abstract class AllManager:Manager
{
};
//sonclass1:FemaleManager
class FemaleManager:AllManager
{
override public void KickOut()
{
Console.WriteLine("Please Go Out!");
}
};
//sonclass2:MaleManager
class MaleManager:AllManager
{
override public void KickOut()
{
Console.WriteLine("Out!Shit!");
}
};
class ChatRoom
{
//manager to keep the room silent:Field
private Manager chatroommanager;
//property
public Manager ChatRoomManager
{
set{ chatroommanager=value; }
}
//Method
public void KickOut()
{
chatroommanager.KickOut();
}
};
//-------------------------------------------------TestApp
class TestApp
{
public static void Main(string []args)
{
ChatRoom chatroom = new ChatRoom();