using System;
namespace ConsoleApplication1 { abstract class AbstractBase // 抽象クラス。継承しない限り、インスタンスを生成できない。 { public void Write() { Console.WriteLine("AbstractBase"); }
public abstract void Something(); // 抽象メソッド。派生クラスでオーバーライドが必要。 } sealed class Drive1 : AbstractBase // シールド付きクラス。Drive1 を継承できないようにする。 { new public void Write() { Console.WriteLine("Drive1"); }
public override void Something() // 抽象クラスの実体。 { } }
class VirtualBase { public virtual void Write() { Console.WriteLine("VirtualBase"); } } class Drive2 : VirtualBase { public sealed override void Write() // シールド付きメソッド。Write() メソッドをオーバーライドできないようにする。 { Console.WriteLine("Drive2"); } }
class Program { static void Main(string[] args) { AbstractBase d1 = new Drive1(); d1.Write(); // コンパイラが静的に型を判断するため AbstractBase を出力する。
VirtualBase d2 = new Drive2(); d2.Write(); // 実行時に動的に型を判断するため Drive2 を出力する。 } } } |