欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C#入門之定義類成員與接口實現(xiàn)

 更新時間:2022年05月09日 15:58:25   作者:springsnow  
這篇文章介紹了C#入門之定義類成員與接口實現(xiàn),文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下

一、類成員的訪問級別

  • public:可由任何代碼訪問。
  • private(默認):只能由類中的代碼訪問。
  • internal:只能由它所在的項目(程序集)內(nèi)部代碼訪問。
  • protected:只能由類和其派生類訪問。
  • protected internal:只能由它所在的項目(程序集)或派生類的代碼訪問。

二、定義字段

class MyClass
{
    public int MyInt;//公共字段
    int myInt;//私有字段
    public readonly int MyInt2 = 17;//只讀成員,只能在聲明時賦值或在構(gòu)造函數(shù)中賦值。
    public static int myInt3;//靜態(tài)字段,通過類訪問。作用:1、記錄一實例化對象的個數(shù),2、存儲必須在所有實例間共享的值。
    public const float PI = 3.14F;//常量,編譯時就固定,一旦發(fā)生更改,需要重新編譯,必須且只有在聲明時初始化。
}

三、定義方法

方法的繼承修飾符:

  • virtual:方法可以重寫。
  • abstract:方法必須重寫,只用于抽象類。
  • override:重寫一個基類方法。可以和sealed一起使用,應用在方法或?qū)傩裕硎静荒苓M一步的重寫了。
  • extern:代碼放于項目外,僅用于靜態(tài)[DllImport]表示的方法。
  • static:方法只能通過類訪問。靜態(tài)方法和屬性不能訪問其基類的非靜態(tài)成員,不能訪問任何對象的實例變量。靜態(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()// 重寫了基類方法M
    {
        Console.Write("BM");
    }
}

無論基類是否為虛擬,派生類都可以用new 來隱藏。不覆蓋基類方法,不影響基類的方法??梢杂胋ase.M()方式訪問基類成員。

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()// 重寫了基類方法M
    {
        Console.Write("BM");
    }
}

四、定義屬性

屬性的繼承修飾符:virtual,abstract,override.

  • 只讀屬性:不頂用其中的get、set方即可。
  • 只寫屬性:用private修飾符對get、set方法進行保護。
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");
        }
    }
}

五、接口實現(xiàn)

實現(xiàn)接口的類必須實現(xiàn)所有接口成員,且匹配指定的簽名。接口成員默認是公共的。

若要實現(xiàn)接口成員,類中對應的成員必須是公共的,非靜態(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()   //顯示接口實現(xiàn)
    {
        return _x;
    }
    public int IMyInt//隱式接口實現(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、顯示接口實現(xiàn),只能通過接口訪問:

MyInterface myClass=new MyClass();
myClass.DoSth();

2、隱式接口實現(xiàn),既可通過類,也可通過接口訪問。

MyClass myClass=new MyClass();
myClass.DoSth();

六、定義索引器

索引器indexer是一種特殊類型的屬性。添加到類中,以提供類似于數(shù)組的訪問。

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,無set的索引為只讀索引
        set { arr[index] = value; }
    }
}

七、運算符重載

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#入門之定義類成員與接口實現(xiàn)的文章就介紹到這了。希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

最新評論