オブジェクト向け-マルチステート


マルチステート
マルチステートはオブジェクト向けの重要な特徴であり,マルチステートは異なるオブジェクトが同じ動作を実行できることを示すが,彼ら自身の実装コードによって実行しなければならない.
次の点に注意してください.
  • 子クラスは親クラスとして
  • 現れる.
  • サブクラスは、動作時に独自の方法で
  • を実現する.
  • 子クラスが親クラスとして現れる場合、子クラス特有の属性およびメソッドは
  • を使用できません.
    コード実装
    以下では,設計モード書の例を用いて多態を説明する.
    猫と犬の2つのクラスのインスタンスをAnimalという抽象クラスに割り当て,Shoutメソッドを呼び出すと実際には猫と犬の2つのクラスのメソッドが実行される.
    //        
    private Animal[] arrayAnimal;
    //         
    private void button3_Click(object sender,EventArgs e)
    {
    	//      5       
    	arrayAnimal=new Animal[5];
    	arrayAnimal=new Cat("  ");
    	arrayAnimal=new Cat("  ");
    	arrayAnimal=new Dog("  ");
    	arrayAnimal=new Dog("  ");
    	arrayAnimal=new Cat("  ");
    }
    //         
    pravite void button4_Click(object sender,EventArgs e)
    {
    	//    ,    shout
    	foreach (Animal item in arrayAnimal)
    	{
    		//      
    		MessageBox.Show(item.Shout());
    }
    

    マルチステート実装の基礎は,親クラスの虚メソッドと子クラスの書き換えメソッドの使用である.コードは次のとおりです.
    class Animal
    {
    	...
    	//   
    	public virtual string Shout()
    	{
    		return"";
     	}
     }
     class Cat:Animal
     {
     	...
     	public override string Shout()
     	{
     		string result="";
     		for (int i=0;i

    マルチステートがなければ,応募した動物がshoutメソッドを実装するには,インスタンスごとにコードを1行書くか,クラスによってグループ化して実装する.
    猫と犬は2つの異なるクラスに属しているので、1つの配列に配置することはできません.
    private void button3_Click(object sender,EventArgs e)
    {
    	Cat a =new Cat("  ");
    	Cat b =new Cat("  ");
    	Dog c =new Dog("  ");
    	Dog d =new Dogt("  ");
    	Cat e =new Cat("  ");
    }
    pravite void button4_Click(object sender,EventArgs e)
    {
    	a.Shout();
    	b.Shout();
    	c.Shout();
    	d.Shout();
    	e.Shout();
    }
    

    実質
    対象に向かう多態の実質は空論を語り、実事を行うことである.抽象類は実際には空論の担体であり,実際に実際に実際のことをするのは具体的な実現類であるという意味である.