①、將文件夾中的音樂名稱複製到一個文本文檔中
static void Main(string[] args)
{
string path = @"C:\Users\Smile\Desktop\MUSIC"; //創建一個文件夾路徑
string pathtext = @"C:\Users\Smile\Desktop\1.txt"; //創建一個文本文檔路徑
string[] str=Directory.GetFiles(path); //獲取文件夾路徑下面的除文件夾之外的所有文檔
List<string> musics = new List<string>(); //創建歌曲名稱的存放泛集合
for (int i = 0; i < str.Length ; i++) //遍歷文件夾下獲取的所有文件名稱路徑
{
//方法一:將文件名路徑進行切割
string[] splitstr=str[i].Split(new char[] { '\\' }, StringSplitOptions.RemoveEmptyEntries);
musics.Add(splitstr[splitstr.Length - 1]); //將切割出來的最後的一個內容添加到泛集合musics變量中
//方法二:獲取最後\的索引值,然後讀取\後面的內容
int index=str[i].LastIndexOf("\\");
musics.Add(str[i].Substring(index + 1));
}
File.WriteAllLines(pathtext, musics); //調用File按行寫入的方法,將內容寫入控制檯
}
②、多態代碼
//當子類方法與父類方法具有相同方法名稱時,運行沒有問題,但子類的方法名會報綠線,那如何解決這個綠線?
//方法一:(不推薦使用)在子類方法中添加new 關鍵字,無論是否加new都不影響使用.new隱藏基類當中的方法
//方法二:(推薦使用)在子類方法中添加override 重寫父類方法,父類方法修飾符後面需加virtual關鍵字,方法不能用Static修飾,不能用private,原因:爲了讓子類訪問,不能爲私有
//爲什麼不能使用static,因爲用了static只能用類來調取方法,即類.方法名,這樣子類就無法調取父類的方法
//方法二是把父類的方法進行了重寫,創新,已經是子方法特有的方法了。父類方法依然存在,可以調取
//爲什麼直接把子類中的方法名稱改掉而要重寫呢?爲了調取時方便,只調取一個方法名。
//多態就是對象可以表現多個類型的能力
class Program
{
static void Main(string[] args)
{
//隨機產生10個類的對象
Animal[] animals = new Animal[10]; //實例化是一個類數組,即建立一個類數組
Random rnd = new Random(); //實例化一個隨機數
for (int i = 0; i < animals.Length; i++) //遍歷類數組
{
int num = rnd.Next(1, 5); //創建一個1-4的隨機數
switch(num) //將num轉換到以下不同的case中
{
case 1:animals[i] = new Pig("趙");break; //如果num=1,實例化類組合中的類
case 2:animals[i] = new Dog("錢");break; //如果num=2,實例化類組合中的類
case 3:animals[i] = new Cat("孫");break; //如果num=3,實例化類組合中的類
case 4:animals[i] = new Cow("李");break; //如果num=4,實例化類組合中的類
}
}
for (int i = 0; i < animals .Length ; i++) //遍歷已經實例化完的類數組
{
animals[i].Shout(); //調取每個數組中實例化類,即對象的方法
}
Console.ReadKey();
}
}
public abstract class Animal //創建一個抽象類Animal
{
public Animal(string name) //創建抽象類Animal的構造函數
{
this._name = name;
}
string _name;
public string Name
{
get { return _name; }
set { _name = value; }
}
public abstract void Shout(); //創建抽象方法,動物叫,叫是一個動作,因每個動物叫的聲音不一樣,所以這裏定義爲抽象方法,具體的聲音讓子類實現
}
public class Pig:Animal //創建一個Pig類繼承抽象類Animal
{ public Pig(string name):base(name) //創建一個Pig的構造函數,name的參數從基類中獲得
{
}
public override void Shout() //子類通過override 關鍵字來重寫父類中的抽象方法
{
Console.WriteLine("{0},哼哼",this.Name);
}
}
③、抽象代碼
//抽象方法用abstract修飾
//抽象方法裏面沒有方法體
//抽象方法,抽象成員必須在抽象類中
//抽象類有非抽象成員,非抽象方法
//抽象類無法實例化,抽象方法無法調取
//父類是抽象類,子類繼承了這個類,必須把抽象類中的方法進行重寫,否則會報錯,必須要override,抽象類的派生類(子類)必須實現抽象方法體
//抽象類只能用於基類,無法實例化
//抽象方法只有子類可以重寫,所以子類中一般不寫抽象類
class Program
{
static void Main(string[] args)
{
Pig pig = new Pig(); //實例化一個Pig類
pig.Shout(); //調取對象pig的Shout方法
Console.ReadKey();
}
}
public abstract class Animal
{
public Animal(string name)
{
this._name = name;
}
public Animal()
{
}
string _name;
public string Name
{
get { return _name; }
set { _name = value; }
}
public abstract void Shout(); //抽象方法沒有方法體
}
public class Pig:Animal //子類Pig繼承父類Animal
{
public override void Shout() //子類用override關鍵字重寫了父類Shout方法
{
Console.WriteLine("哼哼叫");
}
}
④、接口代碼
interface IFly
{
void IFly();
}
class Program
{
static void Main(string[] args)
{
Animal animal = new Animal("喬巴"); //實例化一個Animal類,即創建一個animal對象
animal.IFly(); //調用對象animal的IFly()方法
Console.ReadKey();
}
}
public class Animal:IFly //創建一個Animal類實現IFly接口
{
public void IFly() //子類要實現方法就要有具體的方法體
{
Console.WriteLine("我會飛");
}
public Animal(string name) //創建抽象類Animal的構造函數
{
this._name = name;
}
string _name;
public string Name
{
get { return _name; }
set { _name = value; }
}
}
終於完成核心代碼的練習,下一站走起^_^