C#インタフェースプローブ

2470 ワード

インタフェース宣言構文:
public interface IDisposable
{
     void Disposable();
}

宣言インタフェースは、構文的に宣言抽象クラスと完全に同じですが、インタフェース内のメンバーの実装は許可されません.一般的に、インタフェースには、メソッド、プロパティ、インデックス、イベントの宣言のみが含まれます.
インタフェースはインスタンス化できません.メンバーの署名のみが含まれます.インタフェースには、コンストラクション関数もフィールドも含まれず、演算子の再ロードも許可されません.
インタフェースでは、メンバーに関する修飾子の宣言は許可されていません.インタフェースメンバーは常に公開されており、仮想または静的として宣言できません.必要に応じて、インプリメンテーションされたクラスが宣言されるべきであるため、実行されたクラスがアクセス修飾子を宣言することを実装することが望ましい.
次の例では、インタフェースを定義および実装する方法を示します.
using System;
using Gemire.ProCSharp;
using Gemire.ProCSharp.VenusBank;
using Gemire.ProCSharp.JupiterBank;
namespace Gemire.ProCSharp
{
   class MainEntryPoint
   {
	  static void Main()
	  {
		 IBankAccount venusAccount = new SaverAccount();
		 IBankAccount jupiterAccount = new GoldAccount();
		 venusAccount.PayIn(200);
		 venusAccount.Withdraw(100);
		 Console.WriteLine(venusAccount.ToString());
		 jupiterAccount.PayIn(500);
		 jupiterAccount.Withdraw(600);
		 jupiterAccount.Withdraw(100);
		 Console.WriteLine(jupiterAccount.ToString());
		 Console.ReadLine();
	  }
   }
}


namespace Gemire.ProCSharp
{
   public interface IBankAccount
   {
	  void PayIn(decimal amount);
	  bool Withdraw(decimal amount);
	  decimal Balance
	  {
		 get;
	  }
   }
}

namespace Gemire.ProCSharp.VenusBank
{
   public class SaverAccount : IBankAccount
   {
	  private decimal balance;
	  public void PayIn(decimal amount)
	  {
		 balance += amount;
	  }
	  public bool Withdraw(decimal amount)
	  {
		 if (balance >= amount)
		 {
			balance -= amount;
			return true;
		 }
		 Console.WriteLine("Withdrawal attempt failed.");
		 return false;
	  }
	  public decimal Balance
	  {
		 get
		 {
			return balance;
		 }
	  }
	  public override string ToString()
	  {
		 return String.Format("Venus Bank Saver: Balance = {0,6:C}", balance);
	  }
   }
}

namespace Gemire.ProCSharp.JupiterBank
{
   public class GoldAccount : IBankAccount
   {
	  private decimal balance;
	  public void PayIn(decimal amount)
	  {
		 balance += amount;
	  }
	  public bool Withdraw(decimal amount)
	  {
		 if (balance >= amount)
		 {
			balance -= amount;
			return true;
		 }
		 Console.WriteLine("Withdrawal attempt failed.");
		 return false;
	  }
	  public decimal Balance
	  {
		 get
		 {
			return balance;
		 }
	  }
	  public override string ToString()
	  {
		 return String.Format("Jupiter Bank Saver: Balance = {0,6:C}", balance);
	  }
		}
  
}