C#入門之定義類成員與接口實(shí)現(xiàn)
一、類成員的訪問(wèn)級(jí)別
- public:可由任何代碼訪問(wèn)。
- private(默認(rèn)):只能由類中的代碼訪問(wèn)。
- internal:只能由它所在的項(xiàng)目(程序集)內(nèi)部代碼訪問(wèn)。
- protected:只能由類和其派生類訪問(wèn)。
- protected internal:只能由它所在的項(xiàng)目(程序集)或派生類的代碼訪問(wèn)。
二、定義字段
class MyClass
{
public int MyInt;//公共字段
int myInt;//私有字段
public readonly int MyInt2 = 17;//只讀成員,只能在聲明時(shí)賦值或在構(gòu)造函數(shù)中賦值。
public static int myInt3;//靜態(tài)字段,通過(guò)類訪問(wèn)。作用:1、記錄一實(shí)例化對(duì)象的個(gè)數(shù),2、存儲(chǔ)必須在所有實(shí)例間共享的值。
public const float PI = 3.14F;//常量,編譯時(shí)就固定,一旦發(fā)生更改,需要重新編譯,必須且只有在聲明時(shí)初始化。
}三、定義方法
方法的繼承修飾符:
- virtual:方法可以重寫(xiě)。
- abstract:方法必須重寫(xiě),只用于抽象類。
- override:重寫(xiě)一個(gè)基類方法??梢院蛃ealed一起使用,應(yīng)用在方法或?qū)傩?,表示不能進(jìn)一步的重寫(xiě)了。
- extern:代碼放于項(xiàng)目外,僅用于靜態(tài)[DllImport]表示的方法。
- static:方法只能通過(guò)類訪問(wèn)。靜態(tài)方法和屬性不能訪問(wèn)其基類的非靜態(tài)成員,不能訪問(wèn)任何對(duì)象的實(shí)例變量。靜態(tài)成員可繼承。
- new :隱藏基類成員。
void Main()
{
A b1 = new B();//多態(tài)
b1.M();//BM
B b2 = new B();
b2.M();//BM
}
abstract class A
{
public virtual void M()//虛擬方法,可繼承
{
Console.Write("AM");
}
}
class B : A
{
public override void M()// 重寫(xiě)了基類方法M
{
Console.Write("BM");
}
}無(wú)論基類是否為虛擬,派生類都可以用new 來(lái)隱藏。不覆蓋基類方法,不影響基類的方法。可以用base.M()方式訪問(wèn)基類成員。
void Main()
{
A b1 = new B();
b1.M();//AM
B b2 = new B();
b2.M();//BM
}
abstract class A
{
public virtual void M()//虛擬方法,可繼承
{
Console.Write("AM");
}
}
class B : A
{
public new void M()// 重寫(xiě)了基類方法M
{
Console.Write("BM");
}
}四、定義屬性
屬性的繼承修飾符:virtual,abstract,override.
- 只讀屬性:不頂用其中的get、set方即可。
- 只寫(xiě)屬性:用private修飾符對(duì)get、set方法進(jìn)行保護(hù)。
public class A
{
private int intVal;
public int Val
{
get { return intVal; }
set
{
if (value >= 0 && value <= 10)
intVla = value;
else
throw new Exception("XX");
}
}
}五、接口實(shí)現(xiàn)
實(shí)現(xiàn)接口的類必須實(shí)現(xiàn)所有接口成員,且匹配指定的簽名。接口成員默認(rèn)是公共的。
若要實(shí)現(xiàn)接口成員,類中對(duì)應(yīng)的成員必須是公共的,非靜態(tài)的,并且與接口成員集郵相同的名稱和簽名。
interface IMyInterface //定義接口
{
int DoSth();//定義方法
int IMyInt { set; get; }//定義屬性
event EventHandler Event;//定義事件
string this[int index] { get; set; } //定義索引器
}
class MyClass : IMyInterface
{
private int _x;
int IMyInterface.DoSth() //顯示接口實(shí)現(xiàn)
{
return _x;
}
public int IMyInt//隱式接口實(shí)現(xiàn)
{
get { return _x; }
set { _x = value; }
}
public event EventHandler Event;
protected void onEvent()
{
if (Event == null)
{
Event(this, EventArgs.Empty);
}
}
public string this[int index]
{
get { return _x.ToString(); }
set { _x = int.Parse(value); }
}
}1、顯示接口實(shí)現(xiàn),只能通過(guò)接口訪問(wèn):
MyInterface myClass=new MyClass(); myClass.DoSth();
2、隱式接口實(shí)現(xiàn),既可通過(guò)類,也可通過(guò)接口訪問(wèn)。
MyClass myClass=new MyClass(); myClass.DoSth();
六、定義索引器
索引器indexer是一種特殊類型的屬性。添加到類中,以提供類似于數(shù)組的訪問(wèn)。
void Main()
{
MyClass myClass = new MyClass();
myClass[0] = "d";
Console.Write(myClass[0]);//d
Console.Write(myClass[2]);//c
}
public class MyClass
{
private string[] arr = { "a", "b", "c" };
public string this[int index]
{
get { return arr[index]; }//只有g(shù)et,無(wú)set的索引為只讀索引
set { arr[index] = value; }
}
}七、運(yùn)算符重載
void Main()
{
MyClass myClass1 = new MyClass(500);
MyClass myClass2 = new MyClass(200);
Console.Write(myClass1 - myClass2);//300
}
public class MyClass
{
decimal weight;
public MyClass(decimal weight)
{
this.weight = weight;
}
public static decimal operator -(MyClass a, MyClass b)
{
return a.weight - b.weight;
}
}八、定義事件
void Main()
{
MyClass myClass1 = new MyClass();
myClass1.myEvent += (sender, args) => { Console.Write(sender); };
myClass1.TriggerEvent();//MyClass
}
public class MyClass
{
public event EventHandler<EventArgs> myEvent;//定義事件
public void TriggerEvent()
{
EventHandler<EventArgs> temp = myEvent;
if (temp != null)
temp(this, EventArgs.Empty);//觸發(fā)事件
}
}到此這篇關(guān)于C#入門之定義類成員與接口實(shí)現(xiàn)的文章就介紹到這了。希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
詳解C#方法中使用out參數(shù)做登錄判斷代碼實(shí)例
這篇文章主要介紹了C#使用out參數(shù)做登錄判斷,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-04-04
C# winform登陸框驗(yàn)證碼的實(shí)現(xiàn)方法
這篇文章主要為大家詳細(xì)介紹了C# winform登陸框驗(yàn)證碼的實(shí)現(xiàn)方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-08-08
使用C#開(kāi)源文件實(shí)時(shí)監(jiān)控工具Tail&TailUI介紹
本篇文章小編為大家介紹,使用C#開(kāi)源文件實(shí)時(shí)監(jiān)控工具Tail&TailUI介紹。需要的朋友參考下2013-04-04
C#?漢字與拼音互轉(zhuǎn)的實(shí)現(xiàn)示例
本文主要介紹了C#?漢字與拼音互轉(zhuǎn)的實(shí)現(xiàn)示例,文中根據(jù)實(shí)例編碼詳細(xì)介紹的十分詳盡,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-03-03
c#數(shù)據(jù)綁定之將datatabel的data添加listView
這篇文章主要介紹了c#將DataTabel的data添加ListView的示例,實(shí)現(xiàn)功能是通過(guò)響應(yīng)UI Textbox 的值向ListView 綁定新添加的紀(jì)錄。 ,需要的朋友可以參考下2014-04-04
WPF實(shí)現(xiàn)3D翻牌式倒計(jì)時(shí)特效
這篇文章主要為大家詳細(xì)介紹了WPF實(shí)現(xiàn)3D翻牌式倒計(jì)時(shí)特效,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-09-09
c# EPPlus秘籍之Excel實(shí)現(xiàn)圖表導(dǎo)出
這篇文章主要為大家介紹了c# EPPlus秘籍之Excel實(shí)現(xiàn)圖表導(dǎo)出示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-12-12
如何用C#找出數(shù)組中只出現(xiàn)了一次的數(shù)字
數(shù)組從字面上理解就是存放一組數(shù),下面這篇文章主要給大家介紹了關(guān)于如何用C#找出數(shù)組中只出現(xiàn)了一次的數(shù)字,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-12-12

