C#教程之介面用法

iDotNetSpace發表於2009-03-10

using System;

///

/// 建立一個獲取字串資料的介面

///

///

interface IGetData
{
    //介面定義,不使用修飾符

    string GetText();
    void SetText(string str);
    string Content { get;set;}
}
//建立一個獲取整數的介面

interface IGetInt
{
    int GetInt();
    void SetInt(int num);
    int Integer { get;set;}
}
//介面的繼承

interface IGetDataExt : IGetData
{
    string CopySelf();
}
//實現一個介面

public class Data : IGetData
{
    //實現GetText成員函式

    public string GetText()
    {
        return content;
    }
    //實現SetText成員函式

    public void SetText(string str)
    {
        content = str;
    }
    //實現Content屬性,指定為public

    public string Content
    {
        get
        {
            return content;
        }
        set
        {
            content = value;
        }
    }
    private string content;
};

//實現兩個介面

public class StringInt : IGetData, IGetInt
{
    //實現GetText成員函式

    public string GetText()
    {
        return content;
    }
    //實現SetText成員函式

    public void SetText(string str)
    {
        content = str;
    }
    //實現Content屬性,指定為public

    public string Content
    {
        get
        {
            return content;
        }
        set
        {
            content = value;
        }
    }

    //實現GetInt

    public int GetInt()
    {
        return integer;
    }
    //實現SetInt

    public void SetInt(int num)
    {
        integer = num;
    }
    //實現Integer屬性

    public int Integer
    {
        set
        {
            integer = value;
        }
        get
        {
            return integer;
        }
    }
    private int integer;
    private string content;
}

//實現繼承的介面 

public class DataExt : IGetDataExt
{
    //實現GetText成員函式

    public string GetText()
    {
        return content;
    }
    //實現SetText成員函式

    public void SetText(string str)
    {
        content = str;
    }
    //實現Content屬性,指定為public

    public string Content
    {
        get
        {
            return content;
        }
        set
        {
            content = value;
        }
    }
    public string CopySelf()
    {
        return content + content;
    }
    private string content;
}

//override介面的方法

public class VirtualData : IGetData
{
    //定義為一個虛方法

    public virtual void SetText(string str)
    {
        Console.WriteLine("VirtualData.SetText");
        content = str;

    }
    //非虛方法

    public string GetText()
    {
        Console.WriteLine("Virtual.GetText");
        return content;
    }
    public string Content
    {
        get
        {
            return content;
        }
        set
        {
            content = value;
        }
    }
    private string content;
}
//override類實現

public class OverrideData : VirtualData
{
    //override類的virtual方法

    public override void SetText(string str)
    {
        Console.WriteLine("Override.SetText");
        content = str;
    }
    //非virtual的方法

    public new string GetText()
    {
        Console.WriteLine("Override.GetText");
        return content;
    }
    private string content;
}

public class CallData
{
    //Data的測試類

    public static void test()
    {
        //測試一個介面的字串介面

        Data data = new Data();
        data.SetText("SetText");
        Console.WriteLine(data.GetText());
        data.Content = "Content";
        Console.WriteLine(data.Content);

        //測試兩個介面的介面 

        StringInt si = new StringInt();
        si.SetText("StringInt.SetText");
        si.SetInt(100);
        Console.WriteLine("{0},{1}", si.GetText(), si.GetInt());

        si.Content = "StrigInt.Content";
        si.Integer = 200;
        Console.WriteLine("{0},{1}", si.GetText(), si.GetInt());

        //測試繼承介面

        DataExt de = new DataExt();
        de.SetText("DataExt.SetText");
        de.CopySelf();
        Console.WriteLine(de.Content);

        //介面的強制轉化

        StringInt SICast = new StringInt();
        SICast.SetText("SICast.SetText");
        SICast.SetInt(300);
        IGetData DataCast = (IGetData)SICast;
        Console.WriteLine(DataCast.Content);

        IGetInt IntCast = (IGetInt)SICast;
        Console.WriteLine(IntCast.Integer);

        //is關鍵字的使用

        if (SICast is IGetData)
            Console.WriteLine("Implemented from IGetData,{0}",SICast.GetText());
        else
            Console.WriteLine("SICast is not implemented from IGetData");
       
        //as關鍵字的使用

        IGetData DataAS = SICast as IGetData;
        if (DataAS != null)
            Console.WriteLine("Implemented from IGetData,{0}", SICast.GetText());
        else
            Console.WriteLine("SICast is not implemented from IGetData");

        //override與new在類中的使用

        IGetData vd = new OverrideData();
        //呼叫Override.SetText

        vd.SetText("VirtualData.SetText");
        //呼叫Virtual.Get

        vd.GetText();
       
        OverrideData d = new OverrideData();
        //呼叫Override.SetText

        od.SetText("OverrideData.SetText");
        //呼叫Override.GetText

        od.GetText();
    }
};
 

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12639172/viewspace-566601/,如需轉載,請註明出處,否則將追究法律責任。