C#ノート——継承、多態、抽象方法と虚方法、Fileなどを含む

6790 ワード

1.コード引継ぎ例

    public class Employee
    {
        // 
        public string ID { get; set; }
        // 
        public int Age { get; set; }
        // 
        public string Name { get; set; }
        // 
        public Gender Gender { get; set; }

    }

   public class SE:Employee
    {
        public int Popularity { get; set; }
        public SE(string id, string name, int age, Gender gender, int popularity)
        {
            this.ID = id;
            this.Name = name;
            this.Age = age;
            this.Gender = gender;
            this.Popularity = popularity;
        }

        public SE() { }

        public string SayHi()
        {
            string message = string.Format(" , {0}, {1} , {2}, {3}...", this.Name, this.Age, this.ID, this.Popularity);
            return message;
        }
    }

    
    class Program
    {
        static void Main(string[] args)
        {

            SE se = new SE("01", " ", 18, Gender. , 100);
            Console.WriteLine(se.SayHi());
            Console.ReadKey();
         }
    }

皆さん、こんにちは、私は焦げて冻って、今年18歳、工号は01で、私の人気値は100に达します...
SEクラスを定義するクラス名の後にコード「:Employee」が追加された.例えばclass SE:Employee.
私たちはこの方式をクラスの継承と呼んでいます.

2.コード例多態

    public class Animal
    {
        public virtual void Eat()
        {
            Console.WriteLine("Animal eat");
        }
    }

    public class Dog : Animal
    {
        public override void Eat()
        {
            Console.WriteLine("Dog eat");
        }
    }

    public class WolfDog : Dog
    {
        public override void Eat()
        {
            Console.WriteLine("WolfDog eat");
        }
    }

    class Tester
    {
        static void Main(string[] args)
        {
            Animal[] animals = new Animal[3];

            animals[0] = new Animal();
            animals[1] = new Dog();
            animals[2] = new WolfDog();

            for (int i = 0; i < 3; i++)
            {
                animals[i].Eat();
            }
        }
}

以上のコードの実行結果は:Animal eat...Dog eat... WolfDog eat...
上記の例ではクラスDogはクラスAnimalから継承され,メソッドEat()が書き換えられ,クラスWolfDogはDogから継承され,もう一度Eat()メソッドが書き換えられ,マルチステートがうまく実現されている.どの層が継承されているかにかかわらず、親メソッドがoverrideで修飾されている場合、子メソッドが継承されている場合、overrideで修飾されている場合、多層継承のマルチステートはこのように実現されます.この書き換えを終了するには,書き換え方法をsealedキーワードで修飾するだけでよい.

3.コード例抽象クラス

    public abstract class Ball
    {
        // 
        public abstract string GetName { get; }
        // 
        public abstract void Play();
    }

    // 
    public class FootBall : Ball
    {
        public override string GetName
        {
            get { return " "; }
        }
        public override void Play()
        {
            Console.WriteLine(" ");
        }
    }
    
    // 
    public class BasketBall : Ball
    {
        public override string GetName
        {
            get { return " "; }
        }
    
        public override void Play()
        {
            Console.WriteLine(" ");
        }
    }

    static void Main(string[] args)
        {

            // 
            FootBall footBall = new FootBall();
            BasketBall basketBall = new BasketBall();
            footBall.Play();
            basketBall.Play();
            Console.ReadKey();
   	}

 


以上のコードの実行結果は、焦凍がサッカーをしている爆豪勝がバスケットボールをしていることです.
 

4.抽象クラスとインタフェースの同一点と異なる点


同じ点:
  • ①はいずれも
  • を引き継ぐことができる.
  • ②はいずれもインスタンス化できない
  • ③いずれもメソッド宣言
  • を含むことができる.
  • ④派生クラスは未実現の方法
  • を実現しなければならない.
    違い:
  • 1インタフェースは抽象クラスより抽象的で、抽象クラスでは構造方法を定義することができ、抽象方法と具体的な方法があり、インタフェースの中の方法はすべて抽象方法である.
  • ②抽象クラスの方法はprivate,protected,publicであり、インタフェースはすべてpublicである.
  • ③抽象クラスではメンバー変数を定義できますが、インタフェースで定義されたメンバー変数は実際には定数です.
  • ④インタフェースは多重に実現でき、抽象クラスは単一に継承されるしかない.
  • ⑤インタフェースは基本的に継承された具体的な特徴を備えておらず、呼び出すことができる方法だけを承諾している.
  • ⑥インタフェースはコールバックをサポートするために使用することができ、継承はこの特徴を備えていない.

  • 5.抽象方法と虚方法


    1抽象方法はabstractで修飾し、虚方法はvirtualで修飾する.
    2抽象的な方法には方法体が許されず、虚の方法には方法体が必要で、たとえ1つのセミコロンであっても.
    3抽象的な方法は布団類overrideでなければならないが、虚の方法は布団類overrideであることができる.
    ④抽象メソッドは抽象クラスでしか定義できないが、ダミーメソッドは密封クラス以外でも定義できる.

    6.抽象クラスと抽象メソッドを定義するキーワード


    抽象クラス用——abstract.抽象的な方法はoverrideを使う.

    7.XMLの一般的な方法

            //Load()    XML 
    	static void Main(string[] args)
            {
    
                XmlDocument myxml = new XmlDocument();
                myxml.Load(@"D:NuoWei.xml");    // XML 
                XmlNode engineer = myxml.DocumentElement;   // XML 
                foreach (XmlNode node in engineer.ChildNodes)   // 
                {
                    // 
                    switch (node.Name)
                    {
                        case "ID":
                            Console.WriteLine("ID:{0}",node.InnerText);
                            break;
                        case "Name":
                            Console.WriteLine(" :{0}",node.InnerText);
                            break;
                        case "Age":
                            Console.WriteLine(" :{0}",node.InnerText);
                            break;
                    }
                }
                Console.ReadLine();
                Console.ReadKey();
    	}

    8.ファイル操作の一般的な方法

  • ①ファイルが存在するか否かを判断する方法:File.Exists()
  • public static bool Exists(string path);
  • // 
    if(File.Exists(@"c:
    ewFile.txt")) // {  CopyFile(); //  DeleteFile(); //  MoveFile(); // } else {  MakeFile(); //  OpenFile(); //  SetFile(); // }
    上のコードは、c:ewFileが存在するか否かを判断する.txtファイル.存在する場合は、ファイルをコピーしてから削除し、最後にコピーしたファイルを移動します.存在しない場合は、ファイルを作成してからファイルを開き、書き込み操作を行い、最後にファイルプロパティを読み取り専用、非表示にします.

  •  
  • ②ファイルコピー方法:File.Copy()
  • public static void Copy(string sourceFileName,string destFileName,bool overwrite);
  • // 
    private void CopyFile()
    {
     File.Copy(@"c:
    ewFile.txt",@"c:\BackUp.txt",true); }
    上のコードはc:ewFile.txtはc:BackUpにコピーする.txt. CopeメソッドのOverWriteパラメータをtrueとするので、BackUp.txtファイルが既に存在すると、コピーされた過去のファイルに上書きされます.

  •  
  • ③ファイル移動方法:File.Move()
  • public static void Move(string sourceFileName,string destFileName); 
  • // 
    private void MoveFile()
    {
     File.Move(@"c:\BackUp.txt",@"d:\BackUp.txt");
    }
    上のコードはc:BackUp.txtファイルはdディスクルートディレクトリの下に移動します.

  •  
  • ④ファイル削除方法:File.Delete()
  • public static void Delete(string path);
    // 
    private void DeleteFile()
    {
     File.Delete(@"c:
    ewFile.txt"); }
    上のコードはc:ewFile.txtファイルを削除します.c:ewFile.txtは存在せず、異常も起こらない