最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

C#的一些筆記

2023-01-25 19:46 作者:鹿共禾Gonghe  | 我要投稿

???????? C#的函數(shù)&方法

解釋:

函數(shù)就是講一堆代碼進(jìn)行重用的一種機(jī)制,函數(shù)就是一堆代碼,這段代碼可能有輸入的值(參數(shù)),可能會(huì)返回值,一個(gè)函數(shù)就像一個(gè)專門做這件事的人,我們調(diào)用他來做一些事情,他可能需要我們提供一些數(shù)據(jù)給他,他執(zhí)行完后可能會(huì)有一些執(zhí)行結(jié)果給我們。要求的數(shù)據(jù)就叫參數(shù),返回值的執(zhí)行結(jié)果就是返回值。

函數(shù)的語法

訪問修飾符? ? 修飾符? ? 返回值類型? ? 方法名(參數(shù)列表)
{
? ?
語句塊;
}

[public] static 返回值類型 方法名([參數(shù)列表])

{

?????? 方法體;

}

Public:訪問修飾符,公開的,公共的,那都可以訪問

public

成員可以被任何代碼訪問。

2) private

成員僅能被同一個(gè)類中的代碼訪問,如果在類成員前未使用任何訪問修飾 符,則默認(rèn)為private。

3) internal

成員僅能被同一個(gè)項(xiàng)目中的代碼訪問。

4) protected

受保護(hù)的明知呢個(gè)在當(dāng)前類的內(nèi)部以及該類的子類中訪問

Static:靜態(tài)的(修飾符)

返回值類型:如果不需要寫返回值,寫void

方法名:Pascal 每個(gè)單詞的首字母大寫,其余字母小寫

參數(shù)列表:完成這個(gè)方法必須提供給這個(gè)方法的條件。如果沒有參數(shù)小括號(hào)也不能省略

?

方法寫好之后,如果想執(zhí)行,必須要在Main函數(shù)里進(jìn)行調(diào)用。

方法的調(diào)用語法:

關(guān)鍵字 變量名 = 類名.方法名(參數(shù));

在某些情況下,類名是可以省略的,如果你寫的方法跟Main()函數(shù)在同一個(gè)類中,這個(gè)時(shí)候,類名可以省略。

Return

1、? 在方法中返回要返回的值

2、? 立即結(jié)束本次方法

?

例如:

namespace ConsoleApp29

{

??? internal class Program

??? {

??????? static void Main(string[] args)

??????? {

??????????? //計(jì)算兩個(gè)整數(shù)之間的最大值

??????????? int max = Program.GetMax(1, 3);

??????????? Console .WriteLine (max);

??????????? Console.ReadKey();

??????? }

??????? /// <summary>

??????? /// 計(jì)算兩個(gè)整數(shù)之的最大值并且將最大值返回

??????? /// </summary>

??????? /// <param name="n1">第一個(gè)整數(shù)</param>

??????? /// <param name="n2">第二個(gè)整數(shù)</param>

??????? /// <returns>將最大值返回</returns>

??????? public static int GetMax(int n1,int n2 )

??????? {

??????????? return? n1>n2 ? n1 : n2;

??????? }

??? }

}

函數(shù)&方法的調(diào)用

我們?cè)谠贛ain()函數(shù)中,調(diào)用Test()函數(shù),我們管Main()函數(shù)稱之為調(diào)用者,管Test()函數(shù)稱之為被調(diào)用者。

如果被調(diào)用者想要得到調(diào)用者的值

1,? 傳遞參數(shù)

2,? 使用靜態(tài)字段來模擬全局變量(C#當(dāng)中沒有全局變量)public static int _number = 10;(聲明到類當(dāng)中)

3,? 返回值

2,不管是實(shí)參或是形參都是在內(nèi)存里開辟了一塊空間的

static void Main(string[] args)

??????? {

??????????? //比較兩個(gè)數(shù)字的大小

??????????? int n1 = 10;

??????????? int n2 = 20;

??????????? GetMax(n1,n2);//實(shí)參

??????? }

??????? /// <summary>

??????? /// 計(jì)算兩個(gè)整數(shù)之間的最大值 并返回最大值

??????? /// </summary>

??????? /// <param name="n1">第一個(gè)數(shù)</param>

??????? /// <param name="n2">第二個(gè)數(shù)</param>

??????? /// <returns>返回ide最大值</returns>

??????? public static int? GetMax(int n1,int n2)//形參

??????? {

??????????? int max =n1 > n2 ? n1 : n2;

??????????? return max;

??????? }

方法功能一定要單一?。。?/p>

不要提示用戶輸入在函數(shù)和方法中

?????????????????????????????????????? 特殊參數(shù)

Out參數(shù)

釋義:如果你在一個(gè)方法里,返回了多個(gè)相同類型的值的時(shí)候,可以考慮返滬一個(gè)數(shù)組。但是,如果返回多個(gè)不同類型的值的時(shí)候,返回?cái)?shù)組就不行了。,那么這個(gè)時(shí)候數(shù)組就不行了,那么這個(gè)時(shí)候,我們可以考慮使用out參數(shù)。

Out參數(shù)就側(cè)重于在一個(gè)方法中可以返回多個(gè),要求方法內(nèi)部變量賦值

不同類型的值

Out的應(yīng)用

public static void Test(int[] nums,out int max,out int min,out int sum,out int avg)在行參列表之中協(xié)商要多余返回的那幾個(gè)值(out參數(shù)要求在方法內(nèi)部必須對(duì)其進(jìn)行賦值)

?{

???????

?}

用數(shù)組:

namespace Out參數(shù)

{

??? internal class Program

??? {

??????? static void Main(string[] args)

??????? {

??????????? int[] numbers = {1,2,3,4,5,6,7,8,9};

??????????? //將要返回的四個(gè)值,放到一個(gè)數(shù)組中返回

??????????? int[] res=GetMaxMinSunAvg (numbers);

??????????? Console.WriteLine("最大值是{0},最小值{1},總和{2},平均值{3}", res[0], res[1], res[2], res[3]);

??????????? Console.ReadKey();

??????? }

??????? /// <summary>

??????? /// 計(jì)算一個(gè)數(shù)組的最大值,最小值,總和,平均值

??????? /// </summary>

??????? /// <param name="nums"></param>

??????? /// <returns></returns>

??????? public static int[] GetMaxMinSunAvg(int[]nums)

??????? {

??????????? int[] res = new int[4];

??????????? //假設(shè) res[0]最大值 res[1]最小值 res[2]總和 res[3]平均值

??????????? res[0] =nums[0];//max最大值

??????????? res[1] =nums[0];//min最小值

??????????? res[2] = 0;//sum總和

?

??????????? for (int i = 1; i < nums.Length; i++)

??????????? {

??????????????? //如果當(dāng)前循環(huán)的元素比我假定的還大

??????????????? if(nums[i]>res[0])

??????????????? {

??????????????????? //將當(dāng)前循環(huán)的元素賦值給我的最大值

??????????????????? res[0] = nums[i];

??????????????? }

??????????????? if(nums[i]>res[1])

??????????????? {

??????????????????? //最小值

??????????????????? res[1] = nums[i];

??????????????? }

??????????????? res[2]+=nums [i];

??????????? }

??????????? res[3] = res[2] / nums.Length;

??????????? return res;

?

??????? }

??? }

}

用Out參數(shù)

namespace Out

{

??? internal class Program

??? {

??????? static void Main(string[] args)

??????? {

??????????? int[] number = { 0,1,2,3,4,5,6,7,8,9};

??????????? int max = 0;

??????????? int min = 0;

??????????? int sum = 0;

??????????? int avg = 0;

??????????? Test(number, out max, out min, out sum, out avg);

??????????? Console.WriteLine(max );

??????????? Console.WriteLine(min );

??????????? Console.WriteLine(sum );

??????????? Console.WriteLine(avg );

??????????? Console.ReadKey();

??????? }

??????? /// <summary>

??????? /// 計(jì)算一個(gè)數(shù)組的最大值,最小值,平均值,總和

??????? /// </summary>

??????? /// <param name="nums">要求值得數(shù)組</param>

??????? /// <param name="max">多余返回的最大值</param>

??????? /// <param name="min">多月返回的最小值</param>

??????? /// <param name="sum">多月返回的總和</param>

??????? /// <param name="avg">多于返回的平均值</param>

??????? public static void Test(int[] nums,out int max,out int min,out int sum,out int avg)

??????? {

???????????? max = nums[0];

???????????? min = nums[0];

???????????? sum = 0;

??????????? for (int i=0; i < nums.Length; i++)

??????????? {

??????????????? //最大值

??????????????? if (nums[i] > max)

??????????????? {

??????????????????? max = nums[i];

??????????????? }

??????????????? //最小值

??????????????? if (nums[i] < min)

??????????????? {

??????????????????? min = nums[i];

??????????????? }

??????????????? //總和

??????????????? sum += nums[i];

?

??????????? }

??????????? //平均值

??????????? avg = sum / nums.Length;

????? ??}

??? }

}

Out 2

namespace ConsoleApp2

{

??? internal class Program

??? {

??????? static void Main(string[] args)

??????? {

??????????? Console.WriteLine("請(qǐng)輸入用戶名");

??????????? string userName = Console.ReadLine ();

??????????? Console.WriteLine("請(qǐng)輸入密碼");

??????????? string userPwd = Console.ReadLine();

??????????? string msg;

??????????? bool b= IsLogin(userName, userPwd, out msg);

??????????? Console.WriteLine("登錄結(jié)果{0}", b);

??????????? Console.WriteLine("登錄信息{0}", msg);

??????????? Console.ReadKey();

?

?

??????? }

??????? /// <summary>

??????? /// 判斷用戶是否登陸成功

??????? /// </summary>

??????? /// <param name="name">用戶名</param>

??????? /// <param name="pwd">密碼</param>

??????? /// <param name="msg">多余返回的登錄信息</param>

??????? /// <returns>返回登陸結(jié)果</returns>

??????? public static bool IsLogin(string name,string pwd,out string msg)

??????? {

??????????? if (name == "admin"&&pwd == "123456")

??????????? {

??????????????

??????????????? msg = "登陸成功";

??????????????? return true;

??????????? }

??????????? else if (name == "admin")

??????????? {

??????????????? msg = "密碼錯(cuò)誤";

??????????????? return false;

??????????? }

??????????? else if( pwd =="123456")

??????????? {

??????????????? msg = "用戶名錯(cuò)誤";

??????????????? return false;

??????????? }

??????????? else

????? ??????{

??????????????? msg = "未知錯(cuò)誤";

??????????????? return false;

??????????? }

Ref參數(shù)

釋義:能夠讓幾個(gè)變量帶入一個(gè)方法中進(jìn)行改變,改變完成后,再講改變之后的值帶出方法,ref參數(shù)要求在方法外必須賦值,而方法內(nèi)可以不賦值。

?

(可以不用寫返回值只寫一個(gè)void)

實(shí)例:

static void Main(string[] args)

{

//工資5000

double salary = 5000;

//調(diào)用JiangJin方法

JiangJin(ref salary);

Console.WriteLine(salary );

Console.ReadKey();

}

//獲得獎(jiǎng)金之后工資+500

public static void JiangJin(ref double s)

{

s += 500;

}

實(shí)例

static void Main(string[] args)

??????? {

??????????? int n1 = 10;

??????????? int n2 = 20;

??????????? Test(ref n1,ref n2);

??????????? Console.WriteLine(n1);

??????????? Console.WriteLine(n2);

??????????? Console.ReadKey();

??????? }

??????? public static void Test(ref int n1,ref int n2)

??????? {

??????????? int temp = n1;

??????????? n1 = n2;

??????????? n2 = temp;

?

??????? }

Params可變參數(shù)

釋義:將實(shí)參列表中跟可變參數(shù)數(shù)組類型一致的元素都當(dāng)做數(shù)組的元素,params可變參數(shù)必須是形參列表中的最后一個(gè)元素。

實(shí)例1

static void Main(string[] args)

{

?

Test("張三", 99,88,77);

Console.ReadKey();

}

public static void Test(string name ,params int[] score)

{

int sum = 0;

for (int i=0;i<score.Length; i++)

{

sum += score[i];

}

Console .WriteLine ("{0}這次考試的總成績是{1}",name ,sum );

}

方法的重載

概念:方法的重載指的就是方法的名稱相同,但是參數(shù)不同

參數(shù)不同,分為兩種情況

1,? 如果參數(shù)的個(gè)數(shù)形同,那么參數(shù)的類型就不能相同。

2,? 如果參數(shù)的類型相同,那么參數(shù)的個(gè)數(shù)就不能相同。

***發(fā)方法的重載跟返回值沒有關(guān)系。

?public static void M(int n1, int n2)

{

int result = n1 + n2;

}

public static double M(double d1, double n2)

{

return d1 + n2;

}

public static void M(int n1, int n2, int n3)

{

int result = n1 + n2 + n3;

}

public static string M(string s1, string s2)

{

return s1 + s2;

}

方法的遞歸

方法自己調(diào)用用自己

找出文件夾中所有文件

面向?qū)ο?/strong>

面向過程>>>>面向?qū)ο?/p>

面向?qū)ο螅好嫦虻氖峭瓿蛇@件事的過程,強(qiáng)調(diào)是完成這件事的動(dòng)作。

如果我們用面向過程的思想來解決這件事,當(dāng)執(zhí)行這件事的人的不同的時(shí)候,我們需要位每個(gè)不同的人量身定做解決事情的方法。

面向?qū)ο螅赫覀€(gè)對(duì)象幫你做事(通用的代碼)

把大象放進(jìn)冰箱里

我們把冰箱作為對(duì)象:

1,? 冰箱門可以被打開

2,? 大象可以被塞進(jìn)冰箱里

3,? 冰箱門可以被關(guān)閉

?

A 調(diào)用 函數(shù)1

A 調(diào)用 函數(shù)2——通用,誰都可以使用方法(同理B,C,D都可以使用方法完成把大象放進(jìn)冰箱

A 調(diào)用 函數(shù)3

?

面向?qū)ο螅阂庠趯懗鲆粋€(gè)通用的代碼,屏蔽差異

面向過程:關(guān)門

張三 一腳踹開門

李四 輕輕的·關(guān)門

王五 們沒關(guān)嚴(yán),留了個(gè)尾巴

?

面向?qū)ο螅洪T(對(duì)象一般都是被動(dòng)的)

門可以被關(guān)閉 張三,李四,王五都可以關(guān)閉門

?

我們?cè)诖a中描述一個(gè)對(duì)象,通過描述這個(gè)對(duì)象的屬性和方法

對(duì)象是看得見摸得著的

我們把這些具有相同屬性和相同方法的對(duì)象進(jìn)行進(jìn)一步的封裝,抽象出來,類這個(gè)概念。類就是個(gè)模子,去定了對(duì)象應(yīng)該具有的屬性和方法。對(duì)象是根據(jù)類創(chuàng)建出來的類是抽象的,對(duì)象是實(shí)在的

類:類是模子,確定對(duì)象將會(huì)擁有的特這個(gè)(屬性)和行為(方法)

類:類就是一個(gè)蓋大樓的圖紙 對(duì)象:就是改出來的大樓。

?

語法:

public class 類名

{

?????? 字段;(存儲(chǔ)數(shù)據(jù)的)

?????? 屬性;(屬性的作用是保護(hù)字段,對(duì)字段的復(fù)制和取值進(jìn)行限定)

方法;(函數(shù))

}

寫好一個(gè)類之后,我們需要?jiǎng)?chuàng)建這個(gè)類的對(duì)象,那么,我們管創(chuàng)建這個(gè)類的對(duì)象的過程稱之為類的實(shí)例化。

使用關(guān)鍵字new

This:表示這個(gè)類的對(duì)象。

類是不占內(nèi)存的,而對(duì)象是占內(nèi)存的

屬性的·本質(zhì)就是兩個(gè)方法,一個(gè)get{ }一個(gè)set{ }

Field字段

Method方法

Property屬性

當(dāng)你輸出屬性的值的時(shí)候,會(huì)執(zhí)行g(shù)et方法

get { return _name;}

當(dāng)你給屬性賦值的時(shí)候,首先會(huì)執(zhí)行set方法

set { _name = value;}

?

Value是參數(shù),外邊傳的參數(shù)賦值給字段

Person類:

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

?

namespace ConsoleApp46

{

??? internal class person

??? {

??????? private string _name;

?

??????? public string Name

??????? {

??????????? get {

??????????????? if (_name !="孫全")

??????????????? {

??????????????????? return _name="孫全";

??????????????? }

??????????????? return _name; }

??????????? set { _name = value; }

??????? }

???????? private int _age;

?

??????? public int Age

??????? {

??????????? get { return _age; }

??????????? set {

???????????????

??????????????? if (value <0||value >100)

??????? ????????{

??????????????????? value = 0;

??????????????? }

??????????????? _age = value; }

??????? }

??????? char _gender;

?

??????? public char Gender

??????? {

??????????? get {

??????????????? if (_gender !='男'&&_gender !='女')

??????????????? {

??????????????????? return _gender;

??????????????? }

???????????????

??????????????? return _gender; }

??????????? set { _gender = value; }

??????? }

?????

?

??????? public void SayHello()

??????? {

??????????? Console.WriteLine("我叫{0},我今年{1}歲了,是{2}生",this.Name ,this.Age ,this.Gender);

??????? }

???????

?

???????

?

?

??? }

}

調(diào)用

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

?

namespace ConsoleApp46

{

??? internal class Program

??? {

??????? static void Main(string[] args)

??????? {

??????????? person p = new person();

??????????? p.Age = 10;

??????????? p.Name = "張三";

??????????? p.Gender = '男';

??????????? p.SayHello();

?

??????????? person p2=new person();

??????????? p2.Name = "李四";

??????????? p2.Age = 88;

??????????? p2.Gender ='女';

??????????? p2.SayHello();

?

??????? }

??? }

}

靜態(tài)和非靜態(tài)的區(qū)別-面向?qū)ο蟪跫?jí)

1,非靜態(tài)類中,既可以有實(shí)列成員,也可以有靜態(tài)成員

2在調(diào)用實(shí)例成員的時(shí)候,需要使用對(duì)象名,實(shí)例成員

在調(diào)用靜態(tài)成員的時(shí)候,需要使用類名.靜態(tài)成員名

4,? 靜態(tài)成員必須使用類名去調(diào)用,而實(shí)例成員使用對(duì)象名去調(diào)用

靜態(tài):

?private static string _name;

?public static string Name

?{

????? get { return Person._name; } 2

????? set { Person._name = value; }

?}

非靜態(tài)

private char _gender;

public char Gender

{

get { return _gender; }

set { _gender = value; }

}

5,靜態(tài)函數(shù)中,只能訪問靜態(tài)成員,不允許訪問實(shí)例成員。

6,實(shí)例函數(shù)中,既可以使用靜態(tài)成員,也可以使用實(shí)例成員

7,靜態(tài)類中只允許有靜態(tài)成員,不允許出現(xiàn)實(shí)列成員

?

使用:

1, 如果你想要你的類當(dāng)作一個(gè)“工具類”去使用,這個(gè)時(shí)候可以考慮將類寫成靜態(tài)類

工具類:典型CONSOLE類,經(jīng)常會(huì)用到的東西寫成一個(gè)類就是工具類

2, 靜態(tài)類在整個(gè)項(xiàng)目中資源共享

構(gòu)造函數(shù)

作用幫助我們初始化對(duì)象(給對(duì)象的每個(gè)屬性一次的賦值)

構(gòu)造函數(shù)是一個(gè)特殊的方法

1, 構(gòu)造函數(shù)沒有返回值,連void也不能寫

2, 構(gòu)造函數(shù)名稱必須跟類名一樣

類當(dāng)中會(huì)有一個(gè)默認(rèn)的無參數(shù)的構(gòu)造函數(shù),當(dāng)你寫一個(gè)新的構(gòu)造函數(shù)之后,不管是有參數(shù)的或是無參數(shù)的,那個(gè)默認(rèn)的無參數(shù)的構(gòu)造函數(shù)都被干掉了。

創(chuàng)建對(duì)象的時(shí)候會(huì)執(zhí)行構(gòu)造函數(shù)

?

3, new關(guān)鍵字

Person zsPerson=new Person();

1,在內(nèi)存中開辟一塊內(nèi)存

2,在開辟的空間中創(chuàng)建對(duì)象

4, 調(diào)用對(duì)象的構(gòu)造函數(shù)進(jìn)行初始化對(duì)象

類:

public Student (string name,int age,char gender,int chinese,int math,int english)

??????? {

??????????? this .Name = name;

??????????? this.Age = age;

??????????? this.Gender = gender;

??????????? this.Chinese = chinese;

??????????? this.Math = math;

??????????? this.English = english;

??????? }

??????? private string _name;

??????? public string Name

??????? {

??????????? get { return _name; }

??????????? set { _name = value; }

??????? }

?

??????? private int _age;

?

??????? public int Age

??????? {

??????????? get { return _age; }

??????????? set

??????????? {

??????????????? if (value < 0 || value > 100)

??????????????? {

??????????????????? value = 0;

??????????????? }

?

??????????????? _age = value;

??????????? }

??????? }

??????? private char _gender;

??????? public char Gender

??????? {

??????????? get

??????????? {

??????????????? if (_gender != '男' && _gender != '女')

??????????????? {

??????????????????? return _gender = '男';

??????????????? }

?

??????????????? return _gender;

??????????? }

??????????? set { _gender = value; }

??????? }

??????? private int _chinese;

??????? public int Chinese

??????? {

??????????? get { return _chinese; }

??????????? set { _chinese = value; }

??????? }

??????? private int _math;

??????? public int Math

??????? {

??????????? get { return _math; }

??????????? set { _math = value; }

??????? }

?

??????? private int _english;

?

??????? public int English

??????? {

??????????? get { return _math; }

??????????? set { _math = value; }

??????? }

?

??????? public void SayHello()

??????? {

??????????? Console.WriteLine("我叫{0},我今年{1}歲了,我是{2}生", this.Name, this.Age, this.Gender);

??????? }

?

??????? public void ShowScore()

??????? {

??????????? Console.WriteLine("我叫{0},我的總成績是{1},平均分是{2}", this.Name, this.Chinese + this.English + this.Math, (this.Chinese + this.English + this.Math) / 3);

??????? }

Main函數(shù)

Student zsStudent=new Student("張三", '男', 100, 100, 100);

?

zsStudent.SayHello();

zsStudent.ShowScore();

?

Student xlStudent = new Student("小蘭",16,'女',50,50,50);

?

xlStudent.ShowScore();

xlStudent.SayHello();

?

this

1,? 代表當(dāng)前類的對(duì)象

2,? 在類中顯示的調(diào)用本類的構(gòu)造函數(shù) :this()

析構(gòu)函數(shù)

當(dāng)程序結(jié)束時(shí),析構(gòu)函數(shù)執(zhí)行,幫助我們釋放資源

語法

~ 類名()

{

??????

}

~ student()

{

??????

}

命名空間

可以認(rèn)為類是屬于命名空間的

如果在當(dāng)前項(xiàng)目中沒有這個(gè)類的命名空間,需要我們手動(dòng)導(dǎo)入這個(gè)類所在的命名空間

1),用鼠標(biāo)去點(diǎn)

2),alt+shift+F10

3),記住命名空間,手動(dòng)引用

?

二,在一個(gè)項(xiàng)目中去引用另一個(gè)項(xiàng)目的類

1,? 添加引用 Using 類名;

2,? 引用命名空間

值類型和引用類型

區(qū)別

1,? 值類型和引用類型你在內(nèi)存上存儲(chǔ)的地方不一樣

2,? 在傳遞值類型和傳遞引用類型的時(shí)候,傳遞的方法不一樣

值類型我們稱之為值傳遞,引用類型我們稱之為引用傳遞

值類型:int,double,bool,char,decimal,struct,enum

引用類型:string,自定義類

值類型的值是存儲(chǔ)在內(nèi)存的棧中

引用類型存儲(chǔ)在內(nèi)存的堆中

字符串的不可變性

1,當(dāng)你給一個(gè)字符串重新賦值后,老值并沒有銷毀,而是重新開辟一塊空間存儲(chǔ)

當(dāng)程序結(jié)束后,GC(垃圾內(nèi)存回收器)掃描整個(gè)內(nèi)存,如果發(fā)現(xiàn)有的空間沒有被只想,則立即把他銷毀

?

3,? 我們可以將字符串看作是char類型的一個(gè)只讀(只能讀取不能更改)數(shù)組,既然可以將string看作char類的只讀數(shù)組,所以我可通過下表去訪問字符串中的摸一個(gè)元素

4,? 字符串提供的個(gè)種方法

1)length:獲得當(dāng)前字符串中字符的個(gè)數(shù)

2,ToUpper():將字符串轉(zhuǎn)換為大寫形式

3),ToLower():將字符串轉(zhuǎn)換為小寫形式,

4),Equals(lesstwo,StringComparison.CurrentCultureIgnoreCase):比較兩個(gè)字符串是否相同,忽略大小寫

5),Split():分割字符串沒返回字符串類型的數(shù)組

6),Substring():解決字符串,在截取的時(shí)候包含要截取的那個(gè)位置。????

7),IndexOf():判斷某個(gè)字符串在字符串中第一次出現(xiàn)的位置,若沒有返回一個(gè)-1

8),LastIndexOf():判斷某個(gè)字符串在字符串中最后一次出現(xiàn)的位置,如果沒有返回-1

9),StartWith():判斷以什么 什么開始

10),EndsWith():判斷以什么 什么結(jié)束

11),Replace():判斷字符串中是否包含指定的字符串

12),Contains():判斷某個(gè)字符串是否包含指定的字符串

13),Trim():去掉字符串中的前后的空格

14),TrimEnd():去掉字符串中結(jié)尾的空格

15),TrimStart():去掉字符串中前面的空格

16),IsNullOrEmpty():判斷一個(gè)字符串是否為空或者位null

17),String.Join():將數(shù)組按照指定的字符串連接,返回一個(gè)字符串

練習(xí):

Console.WriteLine("請(qǐng)輸入你喜歡的課程");

string lessone = Console.ReadLine();

//lessone = lessone.ToUpper();

Console.WriteLine("請(qǐng)輸入你喜歡的課程");

string lesstwo=Console .ReadLine();

//lesstwo = lesstwo.ToUpper();

if (lessone.Equals (lesstwo,StringComparison.CurrentCultureIgnoreCase))

{

Console.WriteLine("你們倆喜歡的課程相同");

}

else

{

Console .WriteLine("你們倆喜歡的課程不同");

?

}

Console.ReadKey();

string s = "abcdefg";

Console.WriteLine(s[0]);

Console .ReadKey ();

5),Split()分割字符串,返回字符串類型的數(shù)組

?

?

5, 如果要改變數(shù)組,首先將字符串轉(zhuǎn)換為char類型的數(shù)組

char[] chs = s.ToCharArray();

chs[0] = 'b';

TO轉(zhuǎn)向,char類型,Array數(shù)組

將字符數(shù)轉(zhuǎn)換位我們的字符串

s = new string (chs)能夠?qū)har數(shù)組轉(zhuǎn)換為字符串

String Bulider(內(nèi)存垃圾回收器,優(yōu)化程序運(yùn)行速度)

StringBuilder sb= new StringBuilder();

String str = null;//null是空的意思

Stopwatch sw = new Stopwatch();

//創(chuàng)建一個(gè)計(jì)時(shí)器

sw.Start();

for (int i = 0; i < 10; i++)

{

//str += i;

sb.Append(i);

}

sw.Stop();

Console.WriteLine(sw.Elapsed);

Console.ReadKey();

繼承

我們可能會(huì)在一些類中,寫一些重復(fù)的成員,我們可以將這些重復(fù)的成員。

單獨(dú)的封裝到一個(gè)類中,作為這些類的父類

Student,teacher,Drive,子類 派生類

Person????????????????? 父類 基類

子類繼承了父類,那么子類從父類那里繼承過來了什么?

子類能訪問到的屬性和方法,但是子類并沒繼承父類的私有字段

子類沒有 繼承 父類的構(gòu)造函數(shù),但是,子類會(huì)默認(rèn)調(diào)用父類無參數(shù)的·構(gòu)造函數(shù)。

創(chuàng)建 父類 對(duì)象,讓子類可以使用父類中的成員。

所以,如果在父類中重現(xiàn)寫了一個(gè)有參數(shù)的構(gòu)造函數(shù)之后,那個(gè)無參數(shù)的具備干掉了。

子類調(diào)用不到了,所以子類會(huì)報(bào)錯(cuò)

解決方法

1),在父類中重新寫一個(gè)無參數(shù)的構(gòu)造函數(shù)

2),在子類中顯示的調(diào)用 父類 的構(gòu)造函數(shù)函數(shù),使用關(guān)鍵字 :base():

繼承的特性

1,? 繼承的單根性,一個(gè)子類只能有一個(gè)父類

2,? 傳遞性

3,? 子類沒有繼承構(gòu)造函數(shù)

?

Object是所有類的基類

NEW關(guān)鍵字

1,? 創(chuàng)建對(duì)象

2,? 隱藏從父類那里繼承過來的同名成員 隱藏的后果就是子類調(diào)用不到父類的成

里氏轉(zhuǎn)換

1,? 子類可以賦值給父類,如果有一個(gè)地方血藥一個(gè)父類作為參數(shù),我們可以給一個(gè)子類代替

2,? 如果父類重裝的是子類對(duì)象,那么可以將個(gè)父類強(qiáng)轉(zhuǎn)為子類

?

子類對(duì)象可以調(diào)用父類中的成員,但是父類對(duì)象永遠(yuǎn)都之呢個(gè)調(diào)用自己的成員

Is:表示類型轉(zhuǎn)換,如果能夠轉(zhuǎn)換成功,則返回一個(gè)true,否則返回一個(gè)false

as:表示類型轉(zhuǎn)換,如果能夠轉(zhuǎn)換則返回對(duì)應(yīng)的對(duì)象,都則返回一個(gè)null

ArrayList集合

集合,有很多數(shù)據(jù)的一個(gè)集合

集合的好處:長度可以任意改變,類型隨便

ArrayList list = new ArrayList();

list.Add(1);

list.Add(3.14);

list.Add(true);

list.Add("張三");

list.Add('男');

list.Add(5000m);

list.Add(new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9 });

Perosn p = new Perosn();

list.Add(p);

list.Add(list);

?

list .AddRange ();可以直接輸出數(shù)組,集合

list.Clear();清空所有元素

list.Remove(true);刪除單個(gè)元素

list.RemoveAt(0);根據(jù)下標(biāo)刪除元素

list.RemoveRange(0,3);根據(jù)下標(biāo)刪除一定范圍的元素

list.Sort();升序排列

list.Reverse();反轉(zhuǎn)

list.insert(1,”插入的”);在指定的位置插入一個(gè)元素

list.InsertRange(0,new string []”張三”,“李四“});在指定的位置插入一個(gè)集合

bool b =list.Contains(1);判斷是某個(gè)指定的元素

?

ArrayList集合的長度問題

每次集合中實(shí)際包含的元素個(gè)數(shù)(count超過了可以包含的元素的個(gè)數(shù)(capcity)的時(shí)候

集合就會(huì)像內(nèi)存中盛情多開辟已被的控件,來保證集合的長度一直夠用。

List泛型集合

List <int > list=new List<int>();

list.Add(1);

list.Add(2);

list.Add(3);

list.AddRange(new int[] { 1, 2, 3, 4, 5, 6, });

list.AddRange(list);

int [] nums=list.ToArray();

for (int i = 0; i < list .Count ; i++)

{

Console.WriteLine(list[i]);

?

}

Console.ReadKey();

Foreach循環(huán)

foreach (var item in collection)

{

?

}

Var:推斷集合中項(xiàng)的類型

Item:集合中的每一項(xiàng)

In:在什么里

Collection:集合

Hastable鍵值對(duì)集合

在鍵值對(duì)集合當(dāng)中,我們是根據(jù)鍵去找值的。

鍵值對(duì)對(duì)象[鍵]=值

****鍵值對(duì)集合當(dāng)中,鍵必須是唯一的,而值是可以重復(fù)的

Hashtable ht=new Hashtable();

ht.Add(1, "張三");

ht.Add(2, true);

ht.Add(3, '男');

ht.Add(false, "錯(cuò)誤的");

ht[6]= "新來的";

?

?

Dictionary字典集合

Dictionary <int ,string >dic=new Dictionary<int ,string>();

dic.Add(1, "張三");

dic.Add(2, "李四");

dic.Add(3, "王五");

dic[1] = "新來的";

foreach (KeyValuePair <int ,string >kv in dic )

{

Console.WriteLine("{0}---{1}",kv.Key, kv.Value);

}

foreach (var item in dic .Keys )

{

Console.WriteLine("{0}----{1}", item, dic[item]);

}

Console.ReadKey();

Path類

string str = @"C:\3000soft\Red Spider\Data\Message\老趙 . wav";

//獲得文件名

Console.Writeline(Path.GetFileName(str));

// 獲得文件名但是不包含擴(kuò)展名

Console.WriteLine(Path.GetF ileNameWithoutExtension(str));

//獲得文件的擴(kuò)展名

Console.Writeline(Path.GetExtension(str));

//獲得文件所在的文件夾的名稱

Console.WriteL ine(Path.GetDirectoryName(str));

//獲得文件所在的全路徑

Console.WriteLine(Path.GetFullPath(str));

//連接兩個(gè)字符串作為路圣

Console.WriteLine(Path.Combine(@"c:\a\","b.txt"));

File類

絕對(duì)路徑:通過給定的這個(gè)路徑直接能在我的電腦中找到這個(gè)文件

相對(duì)路徑:文件相對(duì)于應(yīng)用程序的路徑

絕對(duì)路徑:string str = File.ReadAllText(@"E:\qwer.txt");

相對(duì)路徑:string str = File.ReadAllText("Ewer.txt");

開發(fā)中使用相對(duì)路徑

?

1,創(chuàng)建文件

File.Create(@"E:\new.mp4");

Console.WriteLine("創(chuàng)建成功");

Console.ReadKey();

2,刪除文件

File.Delete(@"E:\new.mp4");

Console.WriteLine("刪除成功");

Console.ReadKey();

3,復(fù)制文件

File.Copy(@"E:\大自然.MP4",@"E:\A");

Console.WriteLine("復(fù)制成功");

Console.ReadKey();

4,判斷文件是否存在

bool b = File.Exists(@"E:\大自然.mp4");

Console.WriteLine(b);

Console.ReadKey();

5,剪切

File.Move(@"E:\大自然.mp4", @"E:\A");

Console.WriteLine("剪切成功");

Console.ReadKey();

6, 讀取文件信息

讀取字節(jié)(讀取音樂圖像視頻這些文件用這個(gè))

byte[] buffer = File.ReadAllBytes(@"E:\qwer.txt");

Encoding采取編碼讀取方式 Default自己選找編碼格式 GetString獲得字符串

string str = System.Text.Encoding.Default.GetString(buffer);

Console.WriteLine(str);

Console.ReadKey();

數(shù)組一行一行的讀取(精確的操縱每一行數(shù)據(jù))

string[] str = File.ReadAllLines(@"E:\qwer.txt",Encoding.Default );

for (int i = 0; i < str.Length; i++)

{

Console.WriteLine(str[i]);

}

Console.ReadKey();

String形式讀取

string str = File.ReadAllText(@"E:\qwer.txt",Encoding.Default);

Console.WriteLine(str);

Console.ReadKey();

寫入

以字符串?dāng)?shù)組形勢(shì)寫入信息

File.WriteAllLines(@"E:\qwer.txt", new string[] { "bpmof", "detenele" });

Console.WriteLine("OK");

Console.ReadKey();

字符串形勢(shì)寫入

File.WriteAllText(@"E:\qwer.txt", "張三李四王五");

Console.WriteLine("OK");

Console.ReadKey();

不覆蓋寫入

File.AppendAllText(@"E:\qwer.txt", "輸入滾動(dòng)發(fā)");

裝箱和拆箱

裝箱:將值類型轉(zhuǎn)換為引用類型

拆箱:將引用類型轉(zhuǎn)換為值類型

看兩種類型是否發(fā)生了裝箱和拆箱,要看這兩種而類型是否發(fā)生了繼承關(guān)系

裝箱

int n = 10;

object o = n;//裝箱

拆箱

int nn = (int)o;

文件流 FileStream? StreamReader和StreamWrite

文件流和File最大的不同是一點(diǎn)一點(diǎn)的讀取文件,適用于大型文件

FileStream:操作字節(jié)

StreamReader和StreamWrite操作字符的

FileStream怎么用

將創(chuàng)建文件流對(duì)象的過程寫在using當(dāng)中,會(huì)自動(dòng)的幫助我們釋放流所占用的資源

using()

{

??????

}

讀取數(shù)據(jù)

創(chuàng)建文件流

傳參需要三個(gè)參數(shù):1,文件路徑2,針對(duì)這個(gè)文件做什么操作3,對(duì)數(shù)據(jù)進(jìn)行操作

Filemode指定操作系統(tǒng)打開文件的方式(枚舉類型)

調(diào)用OpenOrCreate有打開沒有就創(chuàng)建

FileStream fsRead = new FileStream(@"E:\sss.txt", FileMode.OpenOrCreate, FileAccess.Read);

創(chuàng)建一個(gè)字節(jié)數(shù)組來限定每次讀多少1024KB*1024KB*5=5MB

byte[] buffer = new byte[1024*1024*5];

返回int類型來接收=讓這個(gè)對(duì)象去讀取(字節(jié)數(shù)組限定每次讀取的數(shù)組,0最開始讀數(shù)據(jù),最多讀5MB)

返回本次實(shí)際讀取到的有效字節(jié)數(shù)

int r = fsRead.Read(buffer, 0, buffer.Length);

將字節(jié)數(shù)組中每一個(gè)元素讀取按照指定的編碼格式解碼成字符串Encoding編碼,Default是自己選擇編碼格式

string s =Encoding.Default.GetString(buffer,0,r);

關(guān)閉流

fsRead.Close();

釋放流所占用的資源

fsRead.Dispose();

Console.WriteLine(s);

Console.ReadKey();

寫入數(shù)據(jù)

using(FileStream fsWrirte=new FileStream(@"E:\abc.txt",FileMode.OpenOrCreate,FileAccess.Write ))

{

string str = "我叫鹿共禾";

byte[] buffer = Encoding.Default.GetBytes(str);

fsWrirte.Write(buffer, 0, buffer.Length);

}

Console.WriteLine("創(chuàng)建成功");

Console.ReadKey();

復(fù)制多媒體文件

static void Main(string[] args)

{

//思路:就是將復(fù)制的多媒體文件讀出來,然后再寫入到你指定的位置

string source = @"E:\sss.mp4";

string target = @"E:\asb";

CopyFile(source, target);

Console .WriteLine ("成功");

Console.ReadKey();

}

public static void CopyFile(string source,string target)

{

//創(chuàng)建一個(gè)負(fù)責(zé)讀取的流

using (FileStream fsRead =new FileStream (source ,FileMode.Open,FileAccess.Read))

{

//創(chuàng)建一個(gè)負(fù)責(zé)寫入的流

using (FileStream fsWrite = new FileStream (target ,FileMode.OpenOrCreate,FileAccess.Write ))

{

//字節(jié)數(shù)組限定一次讀取5mb

byte[] buffer = new byte[1024 * 1024 * 5];

//因?yàn)槲募赡鼙容^大,所以我們?cè)谧x取的時(shí)候,應(yīng)當(dāng)通過一個(gè)循環(huán)去讀

while (true )

{

//返回本次讀取實(shí)際讀取到的字節(jié)數(shù)

int r = fsRead.Read(buffer, 0, buffer.Length);

//如果返回一個(gè)0,也就意味著什么都沒有讀取到,讀取完了

if (r==0)

{

break;

}

//寫入調(diào)用

fsWrite.Write(buffer, 0, r);

}

}

}

StreamReader

using (StreamReader sr =new StreamReader (@"E:\abc.txt",Encoding .Default ))

{

while (!sr.EndOfStream)

{

Console.WriteLine(sr.ReadLine());

}

?

}

Console.ReadKey();

StreamWrite

using (StreamWriter sw=new StreamWriter (@"E:\abc.txt"))

{

sw.Write("今天天氣好晴朗,處處好風(fēng)光",true);

}

Console.WriteLine("OK");

Console.ReadKey();

多態(tài)

概念:讓一個(gè)對(duì)象能夠表現(xiàn)出多種的狀態(tài)(類型)

實(shí)現(xiàn)多態(tài)有三種

虛方法,抽象,接口

虛方法

步驟

1,? 將父類的方法標(biāo)記成虛方法,使用關(guān)鍵字 virtual,這個(gè)函數(shù)可以被子類重新寫一遍

子類函數(shù)用override

namespace ConsoleApp62

{

??? internal class Program

??? {

??????? static void Main(string[] args)

??????? {

???????????

??????????? Chinese cn1 = new Chinese("韓梅梅");

??????????? Chinese cn2 = new Chinese("李雷");

??????????? Jb j1 = new Jb("田所浩二");

??????????? Jb j2 = new Jb("114514");

??????????? Kb k1 = new Kb("樸珍希");

??????????? Kb k2 = new Kb("金線繡");

??????????? Am A1 = new Am("科比布萊恩特");

??????????? Am A2 = new Am("川建國");

??????????? Person[] pers = { cn1, cn2, j1, j2, k1, k2, A1, A2 };

??????????? for (int i = 0; i < pers.Length; i++)

??????????? {

?

??????????????? pers[i].SayHello? ();

?

??????????? }

??????????? Console.ReadKey ();

??????? }

??? }

??? public class Person

??? {

??????? private string _name;

??????? public string Name

??????? {

??????????? get { return _name; }

??????????? set { _name = value; }

??????? }

??????? public Person(string name)

??????? {

??????????? this.Name = name;

??????? }

??????? public virtual void SayHello()

??????? {

??????????? Console.WriteLine("我是人類");

??????? }

??? }

??? public class Chinese : Person

??? {

??????? public Chinese(string name) : base(name)

??????? {

?

??????? }

??????? public override? void SayHello()

??????? {

??????????? Console.WriteLine("我是中國人,我叫{0}", this.Name);

??????? }

??? }

??? public class Jb : Person

??? {

??????? public Jb(string name) : base(name)

??????? {

?

??????? }

??????? public override? void SayHello()

????? ??{

??????????? Console.WriteLine("我是日本人,我叫{0}", this.Name);

??????? }

??? }

??? public class Kb : Person

??? {

??????? public Kb(string name) : base(name)

??????? {

?

??????? }

??????? public override? void SayHello()

??????? {

??????????? Console.WriteLine("我是韓國人,我叫{0}", this.Name);

??????? }

??? }

??? public class Am : Person

??? {

??????? public Am(string name) : base(name)

??????? {

?

??????? }

??????? public override? void SayHello()

??????? {

??????????? Console.WriteLine("我是美國人,我叫{0}", this.Name);

??????? }

??? }

}

抽象類

當(dāng)父類中的方法不知道如何去實(shí)現(xiàn)的時(shí)候,可以考慮將父類寫成抽象類,將方法寫成抽象方法。

1,抽象成員必須標(biāo)記為abstract,并且不能有任何實(shí)現(xiàn)

2,? 抽象成員必須在抽象類里

3,? 抽象類不能實(shí)例化

4,? 子類繼承抽象類后,必須把父類中的所有抽象成員都重寫。(除非子類也是抽象類)

5,? 可以包含實(shí)例成員

6,? 抽象類有構(gòu)造函數(shù),但是不能被實(shí)例化

7、如果父類的抽象方法中有參數(shù),那么。繼承這個(gè)抽象父類的子類在重寫父類的方法的時(shí)候必須傳入對(duì)應(yīng)的參數(shù)。如果抽象父類的抽象方法中有返回值,那么子類在重寫這個(gè)抽象方法的時(shí)候也必須要傳入返回值。

8,如果父類中的方法有默認(rèn)的實(shí)現(xiàn),并且父類需要被實(shí)例化,這時(shí)可以考慮將父類定義成一個(gè)普通類,用虛方法來實(shí)現(xiàn)多態(tài)。如果父類中的方法沒有默認(rèn)實(shí)現(xiàn),父類也不需要被實(shí)例化,則可以將該類定義為抽象類。

namespace ConsoleApp2

{

??? internal class Program

??? {

??????? static void Main(string[] args)

??????? {

??????????? MoblieStorage ms = new Udisk();

??????????? coumputer cpu = new coumputer();

??????????? cpu.CPUWrite(ms);

??????????? cpu.CPURead(ms);

??????????? Console.ReadKey();

??????? }

??? }

??? /// <summary>

??? /// 抽象的父類

??? /// </summary>

??? public abstract class MoblieStorage

??? {

??????? public abstract void Read();

??????? public abstract void Wite();

??? }

??? public class MobliedISK : MoblieStorage

??? {

??????? public override void Read()

??????? {

??????????? Console.WriteLine("移動(dòng)硬盤在讀取數(shù)據(jù)");

??????? }

?

??????? public override void Wite()

??????? {

??????????? Console.WriteLine("移動(dòng)硬盤再寫入數(shù)據(jù)");

??????? }

??? }

??? public class Udisk : MoblieStorage

??? {

??????? public override void Read()

??????? {

??????????? Console.WriteLine("U盤在讀取數(shù)據(jù)");

??????? }

?

??????? public override void Wite()

??????? {

??????????? Console.WriteLine("U盤在寫入數(shù)據(jù)");

??????? }

??? }

??? public class MP3 : MoblieStorage

??? {

??????? public override void Read()

??????? {

??????????? Console.WriteLine("MP3在讀取數(shù)據(jù)");

??????? }

?

??????? public override void Wite()

??????? {

??????????? Console.WriteLine("MP3在寫入數(shù)據(jù)");

??????? }

??????? public void palyMusic()

??????? {

??????????? Console.WriteLine("播放音樂");

??????? }

??? }

??? public class coumputer

??? {

??????? public void CPURead(MoblieStorage ms)

??????? {

??????????? ms.Read();

??????? }

??????? public void CPUWrite(MoblieStorage ms)

??????? {

??????????? ms.Wite();

??????? }

??? }

}

接口

接口就是一個(gè)規(guī)范能力

接口不允許添加訪問修飾符,默認(rèn)是Public

不允許寫具有方法體的函數(shù)

可以寫自動(dòng)屬性

接口是

一種規(guī)范。

只要一個(gè)類繼承了一個(gè)接口,這個(gè)類就必須實(shí)現(xiàn)這個(gè)接口中所有的成員

能被實(shí)例化。

也就是說,接口的訪問修飾符成員(不能創(chuàng)建對(duì)象)

接口中的成員不能加“訪問修飾符”,接口中的成員訪問修飾符為public,不能修改。

(默認(rèn)為public)接口中的成員不能有任何實(shí)現(xiàn)(“光說不做”,只是定義了一組未實(shí)現(xiàn)的成員)。

接口中只能有方法、屬性、索引器、事件,不能有“字段”和構(gòu)造函數(shù)。

接口與接口之間可以繼承,并且可以多繼承。

接口并不能去繼承一-個(gè)類, 而類可以繼承接口 (接口只能繼承于接口,而類既可以繼承接口,也可以繼承類)

實(shí)現(xiàn)接口的子類必須實(shí)現(xiàn)該接口的全部成員。

- -個(gè)類可以同時(shí)繼承-一個(gè)類并實(shí)現(xiàn)多口,如果-個(gè)子類同時(shí)繼承了父類A,并實(shí)現(xiàn)了接口IA,那么語法上A必須寫在IA的前面。

class IyClass:A, IA0,因?yàn)轭愂菃卫^承的。

顯示實(shí)現(xiàn)接口的縣的。解決方法的重名問題

在么時(shí)候顯示的丟實(shí)現(xiàn)接口:

當(dāng)繼承的倍口中的方法和參數(shù)-摸-樣的時(shí)候,要是用顯示的實(shí)現(xiàn)接口

當(dāng)-個(gè)抽象類實(shí)現(xiàn)接口的時(shí)候,需要子類去實(shí)現(xiàn)接口。

Public interface I…able

{

??? 成員;方法和屬性,索引器

}

訪問修飾符

1,能夠修飾類的訪問修飾符只有兩個(gè):public,internal

2,可訪問性不一致

子類的訪問權(quán)限不能高于父類的訪問權(quán)限,會(huì)暴露父類的訪問權(quán)限

?

簡單工廠設(shè)計(jì)模式

設(shè)計(jì)模式:設(shè)計(jì)這個(gè)項(xiàng)目的一種方式

namespace 訪問修飾符

{

??? internal class Program

??? {

??????? static void Main(string[] args)

??????? {

??????????? Console.WriteLine("輸入你要的筆記本品牌");

??????????? string User = Console.ReadLine();

??????????? NoteBook nb = GetNoteBook(User);

??????????? nb.SayHello();

??????????? Console.ReadKey();

?

??????? }

??????? /// <summary>

??????? /// 簡單工廠核心根據(jù)用戶的輸入創(chuàng)建對(duì)象復(fù)制給父類

??????? /// </summary>

??????? /// <param name="user"></param>

??????? /// <returns></returns>

??????? public static NoteBook GetNoteBook (string user)

??????? {

??????????? NoteBook nb = null;

??????????? switch (user )

??????????? {

??????????????? case "lenovo":nb = new lenovo ();

??????????????????? break;

??????????????? case "IBM":nb = new IBM();

??????????????????? break;

??????????????? case "Acer":nb = new Acer();

??????????????????? break;

??????????????? case "Dell":nb = new Dell();

??????????????????? break;

??????????? }

?

?

??????????? return nb;

??????? }

??? }

??? public abstract class NoteBook

??? {

??????? public abstract void SayHello();

??? }

??? public class lenovo:NoteBook

??? {

??????? public override void SayHello()

??????? {

??????????? Console.WriteLine("我是聯(lián)想筆記本");

??????? }

??? }

??? public class Acer : NoteBook

??? {

??????? public override void SayHello()

??????? {

??????????? Console.WriteLine("我是宏基筆記本");

??????? }

??? }

??? public class Dell : NoteBook

??? {

??????? public override void SayHello()

??????? {

??????????? Console.WriteLine("我是戴爾筆記本");

??????? }

??? }

??? public class IBM : NoteBook

??? {

??????? public override void SayHello()

??????? {

??????????? Console.WriteLine("我是IBM筆記本");

??????? }

??? }

}

值傳遞和引用傳遞

值類型在復(fù)制的時(shí)候,傳遞的是這個(gè)值的本身

引用類型在復(fù)制的時(shí)候,傳遞的是對(duì)這個(gè)對(duì)象的引用

序列化和反序列化

序列化:就是將對(duì)象轉(zhuǎn)換為二進(jìn)制

反序列化:就是將二進(jìn)制轉(zhuǎn)換為對(duì)象

作用:傳輸數(shù)據(jù)

把這類標(biāo)記為序列化[Serializable]

反序列化:

person p;

using (FileStream fsRead = new FileStream(@"E:\aaaa.txr", FileMode.OpenOrCreate, FileAccess.Read))

{

BinaryReader br = new BinaryReader();

p = (person)br.Deserialize (fsRead );

}

Console.WriteLine("反序列化成功");

Console.ReadKey();

序列化

person p = new person();

p.Name = "張三";

p.Age = 19;

p.Gender = '男';

using (FileStream fsWrite=new FileStream (@"E:\aaaa.txr",FileMode.OpenOrCreate,FileAccess.Write ))

{

BinaryReader br = new BinaryReader ();

br.Serialize(fsWrite, p);

}

Console.WriteLine("序列化成功");

Console.ReadKey();

部分類和密封類

部分類:解決名字重復(fù)問題使用partial,兩個(gè)或多個(gè)類組成一個(gè)類?

public partial class Person

密封類:使用關(guān)鍵字sealed,,不能夠被繼承


C#的一些筆記的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國家法律
永安市| 河曲县| 九龙县| 舞阳县| 吉木萨尔县| 青神县| 扎兰屯市| 德保县| 神木县| 铜梁县| 丰台区| 达州市| 大邑县| 和硕县| 漯河市| 吉林市| 潍坊市| 霍城县| 武威市| 成武县| 灵寿县| 平遥县| 鱼台县| 玉门市| 沐川县| 沈丘县| 西乌| 栾川县| 馆陶县| 普兰县| 巫溪县| 齐河县| 普兰店市| 金门县| 宁陵县| 岑巩县| 响水县| 金平| 宝应县| 文登市| 莲花县|