封裝
oop三大特征之封裝
?*
?*
?*為什么要封裝?
?*?屬性存在的目的其實就是為了保護類的內(nèi)部結(jié)構(gòu)不被破壞,達到封裝性
?*?屬性的語法格式為:
?*?訪問修飾符public(必須滴)+對應(yīng)字段的數(shù)據(jù)類型+字段名稱(首字母必須大寫)
?*?{
?*?
?*?}
?*?屬性本身就是一種特殊的方法,他沒有返回值是因為屬性內(nèi)部提供了可以訪問該屬性的訪問器
?*?
?*?ref參數(shù):將值類型引用改變?yōu)榈刂芬?br>
?*?
?*?值類型作為參數(shù)傳遞是,傳遞的不是本身,而是副本,此時要想修改本身的值,要將值類型改為引用類型
?*?
?*?string雖然本身是引用類型,但是作為參數(shù)哦傳遞的時候,默認是值類型,而不是引用傳遞,這就需要我們
?*?如果想改變原來的字符串,這個時候要將值類型改為引用類型,加上ref關(guān)鍵字
?*?如果不想改變,就用原來的字符串,直接傳遞字符串
?*?
?*?object本身就是引用類型,他和字符串不一樣,默認就是引用類型,也就是傳遞的是地址
?*?數(shù)組作為參數(shù)進行傳遞,也是引用傳遞
?*?
?*?out參數(shù):輸出到
?*?其實就是保存一個數(shù)值在其中
?*?
冒泡排序
public?static?void?MAp(int?[]?Arr){
????????????int?sum=0;
????????????for?(int?j?=?0;?j?<?7;j++)?{
????????????????for?(int?i?=?0;?i?<?7- j -1;?i++)?{
????????????????????
????????????????
????????????????????if?(Arr?[i]>?Arr?[i?+?1])?{
????????????????????????sum?=?Arr?[i?];
????????????????????????Arr?[i]?=?Arr?[i?+?1];
????????????????????????Arr?[i?+?1]?=?sum;
????????????????????}
????????????????}
????????????????Console.WriteLine?();
????????????}
????????????foreach?(var?item?in?Arr)?{
????????????????Console.WriteLine?(item);
????????????}
????????}
//將冒泡排序封裝成方法,在Main方法中遍歷輸出結(jié)果
????????????//編寫一個方法,功能是打印數(shù)組里的元素
????????????int[]?Arr?=?{?1,?2,?5,?8,?3,?5,6?};
????????????MainClass.MAp(Arr);
英雄類
class?Yinxon{
????????????
????????????private?string?name="亞瑟";
????????????private?string?dw="坦克";
????????????private?string?tc="先手";
????????????private?int?sld;
????????????private?string?scnl="89";
????????????private?string?gjsh="320";
????????????private?string?jnxg="100%";
????????????private?string?ssnd="容易上手";
????????????public?string?Name
????????????{
????????????????get{?
????????????????????return?name;
????????????????}????
????????????}
????????????public?string?Dw
????????????{
????????????????get{?
????????????????????return?dw;
????????????????}????
????????????}
????????????public?string?Tc
????????????{
????????????????get{?
????????????????????return?tc;
????????????????}????
????????????}
????????????public?int?Sld
????????????{
????????????????set{?
????????????????????sld=value;
????????????????????Console.WriteLine?("熟練度{0}",sld);
????????????????}
????????????????get{?
????????????????????return?sld;
????????????????}????
????????????
????????????}
????????????public?string?Scnl
????????????{
????????????????get{?
????????????????????return?scnl;
????????????????}????
????????????}
????????????public?string?Gjsh
????????????{????
????????????????get{?
????????????????????return?gjsh;
????????????????}????
????????????}
????????????public?string?Jnxg
????????????{????
????????????????get{?
????????????????????return?jnxg;
????????????????}????
????????????}
????????????public?string?Ssnd
????????????{????
????????????????get{?
????????????????????return?ssnd;
????????????????}????
????????????}
Yinxon?y=new?Yinxon();
????????????y.Sld=100;?
????????????Console.WriteLine?("英雄名:{0}",y.Name);
????????????Console.WriteLine?("定位:{0}",y.Dw);
????????????Console.WriteLine?("特長:{0}",y.Tc);
????????????Console.WriteLine?("生存能力:{0}",y.Scnl);
????????????Console.WriteLine?("攻擊傷害:{0}",y.Gjsh);
????????????Console.WriteLine?("技能效果:{0}",y.Jnxg);
????????????Console.WriteLine?("上手難度:{0}",y.Ssnd);
參數(shù)傳遞
//驗證值類型
????????public?static?void?Swap(ref?int?a,ref?int?c)
????????{
????????????int?temp=0;
????????????temp=a;
????????????a?=?c;
????????????c?=?temp;
????????}
????????//驗證字符串
????????public?static?void?Append(string?str)?
????????{
????????????str="你好"+str;
????????????Console.WriteLine?(str);
????????}
????????//驗證引用類型
????????public?static?void?Update(Student1?s6)
????????{
????????????s6.name="張三";
????????}
????????//驗證數(shù)組
????????public?static?void?UpdateArr(int?[]?intArr)
????????{
????????????intArr[0]=100;
????????}
//?演示1?整形傳遞
????????????int?a=10;
????????????int?c=9;
????????????MainClass.Swap(ref?a,ref?c);
????????????Console.WriteLine?("{0}???{1}",a,c);?
????????????//演示2?字符串傳遞
????????????string?s1="中國";
????????????MainClass.Append(s1);
????????????Console.WriteLine?(s1);
????????????//演示三:對象傳遞
????????????Student1?s6?=?new?Student1?();
????????????s6.name="李四";
????????????MainClass.Update?(s6);
????????????Console.WriteLine?(s6.name);
????????????//演示4?數(shù)組傳遞
????????????int?[]?intArr={1,2};
????????????MainClass.UpdateArr?(intArr);
????????????foreach?(var?item?in?intArr)?{
????????????????Console.WriteLine?(item);
????????????}
繼承
?
*繼承:
?*繼承使用條件:到你在設(shè)計類的時候,發(fā)現(xiàn)有字段相同
?*????????????????具有相同特征不同行為的可以抽取出來,單獨稱為一個類,這個類供派生類使用
?*????????????????簡稱;基類
?*?
?*?
?*?在現(xiàn)實生活中繼承的關(guān)系橫多
?*?1.兒子繼承父親
?*?2.黃燜雞米飯
?*?.......
?*?
?*?在程序中使用關(guān)鍵符號:表示繼承
?*?格式:(:+類)
?*?這個類是指繼承的類
?*?
?*?繼承類的特點
?*?1.子類可以繼承父類中的公有字段
?*?2.子類可以繼承父類的公開屬性
?*?3.子類可以繼承父類中的公開方法
?*?4.父類不能擁有子類的字段、方法、屬性、索引器
?*?5.在C#中不支持多重繼承,也就是一個類只能繼承一個類,如果你想支持多重繼承,那么請使用接口Iterface
?*?6.繼承關(guān)系中的構(gòu)造函數(shù)(重點)
?*?1.在繼承關(guān)系中首先會調(diào)用父類的構(gòu)造函數(shù),然后在調(diào)用子類的構(gòu)造函數(shù)
?*?2.在繼承關(guān)系中子類初始化對象的時候縣調(diào)用父類的構(gòu)造函數(shù),然后再看子類構(gòu)造函數(shù)有沒有顯示
?*?????通知編譯器指定調(diào)用父類的哪個構(gòu)造函數(shù),如果沒有,那么默認去調(diào)用父類中的無慘構(gòu)造函數(shù)
?*?????此時如果父類重寫了帶有參數(shù)的構(gòu)造函數(shù),程序編譯不會通過,那么解決辦法就是給父類添加構(gòu)造函數(shù)
?*?????或者在子類構(gòu)造函數(shù)中聲明指定調(diào)用父類的哪個構(gòu)造函數(shù)
//定義一個父類Hero
public?class?Hero
????{
????????//字段
????????public?string?hero_Name;
????????public?string?hero_Ding;
????????public?string?hero_Te;
????????public?string?hero_Ext;
????????public?string?hero_Live;
????????public?string?hero_Hurt;
????????public?string?hero_Effect;
????????//public?string?hero_Operation;
????????//私有字段
????????private?string?_hero_Operation;
????????public?Hero()
????????{
????????????Console.WriteLine?("構(gòu)造函數(shù)1");
????????}
????????public?Hero(string?hero_Name,int?hero_Ding)
????????{
????????????this.hero_Name=hero_Name;
????????????Console.WriteLine?();
????????????Console.WriteLine?("構(gòu)造函數(shù)2");
????????}
????????//屬性
????????public?string?Hero_Operation
????????{
????????????set{?
????????????????Console.WriteLine?(value);
????????????????_hero_Operation?=?value;
????????????}
????????????get?{?
????????????????return?_hero_Operation;
????????????}
????????}
????????//行為
????????public?void?Baoji()
????????{
????????????Console.WriteLine?("暴擊效果");
????????}
????????//行為1?
????????private?void?Baoji2()
????????{
????????????Console.WriteLine?("暴擊效果2");
????????}
????}
????class?Hero2
????{
????????
????}
????class?Hero_MonKey:Hero
????{
//????????public?string?name;?
//????????public?int?age;?
????????public?Hero_MonKey(string?name,int?age):base(name,age)
????????{
????????????Console.WriteLine?(name);
????????}
????????public?static?void?Main()
????????{
//????????????Hero_MonKey?hm?=?new?Hero_MonKey?();
//????????????hm.hero_Name="111";
//????????????hm.Hero_Operation?=?"222";
//????????????hm.Baoji?();
????????????Hero_MonKey?h?=?new?Hero_MonKey?("XXX",19);?
????????????Console.WriteLine?(h);
????????
????????}