Uz Galaxy - Info Archive top BBS   RSS
Info Archive  C# - 仮想関数 と 純仮想関数  

■ 仮想関数 virtual
オーバーライドが可能な関数として関数を宣言する。
	class Man {
		public virtual void SayHallo() {
			Console.WriteLine("...");
		}
	}

	class Japanese : Man {
		public override void SayHallo() {
			Console.WriteLine("こんにちは");
		}
	}


■ 純仮想関数 abstract
オーバーライドが可能な関数で、継承したクラスに必ず実装させる関数として関数を宣言する。
	abstract class Man {
		public abstract void SayHallo();
	}

	class Japanese : Man {
		public override void SayHallo() {
			Console.WriteLine("こんにちは");
		}
	}


純仮想関数をメンバに持つクラスは、インスタンスを作成することはできない。
しかし、参照変数として用意し、派生したクラスを格納できる。
リスト1のように Man 型で宣言した変数に、異なる派生クラスを格納し、
同じメソッドの呼び出しで、それぞれのクラスによる異なった処理を行うことができる。
リスト1
using System;

namespace ConsoleApplication1
{
	abstract class Man {
		public abstract void SayHallo();
	}

	class Japanese : Man {
		public override void SayHallo() {
			Console.WriteLine("こんにちは");
		}
	}

	class American : Man {
		public override void SayHallo() {
			Console.WriteLine("Hello");
		}
	}

	/// 
	/// Class1 の概要の説明です。
	/// 
	class Class1
	{
		/// 
		/// アプリケーションのメイン エントリ ポイントです。
		/// 
		[STAThread]
		static void Main(string[] args)
		{
			Man[] man = new Man[2];
			man[0] = new Japanese();
			man[1] = new American();

			man[0].SayHallo();
			man[1].SayHallo();

			Console.WriteLine("Enterキーで終了します。");
			Console.Read();
		}
	}
}
出力結果
こんにちは
Hello
Enterキーで終了します。

参照
VB.NETの場合はこちら

Copyright © 2004 Uz. All rights reserved.
http://uzgalaxy.com/
このページはInfoArchiveで作成されています。