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.抽象クラスとインタフェースの同一点と異なる点
同じ点:
違い:
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.ファイル操作の一般的な方法
//
if(File.Exists(@"c:
ewFile.txt")) //
{
CopyFile(); //
DeleteFile(); //
MoveFile(); //
}
else
{
MakeFile(); //
OpenFile(); //
SetFile(); //
}
上のコードは、c:ewFileが存在するか否かを判断する.txtファイル.存在する場合は、ファイルをコピーしてから削除し、最後にコピーしたファイルを移動します.存在しない場合は、ファイルを作成してからファイルを開き、書き込み操作を行い、最後にファイルプロパティを読み取り専用、非表示にします.//
private void CopyFile()
{
File.Copy(@"c:
ewFile.txt",@"c:\BackUp.txt",true);
}
上のコードはc:ewFile.txtはc:BackUpにコピーする.txt. CopeメソッドのOverWriteパラメータをtrueとするので、BackUp.txtファイルが既に存在すると、コピーされた過去のファイルに上書きされます.//
private void MoveFile()
{
File.Move(@"c:\BackUp.txt",@"d:\BackUp.txt");
}
上のコードはc:BackUp.txtファイルはdディスクルートディレクトリの下に移動します.//
private void DeleteFile()
{
File.Delete(@"c:
ewFile.txt");
}
上のコードはc:ewFile.txtファイルを削除します.c:ewFile.txtは存在せず、異常も起こらない