【转】C#教程之接口用法)

本文通过具体实例演示了C#中接口的定义与实现过程,包括单一接口、多重接口及接口继承等概念,并展示了如何利用虚方法与重写来增强代码的灵活性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文转自:http://blog.chinaunix.net/u/19742/showart.php?id=529218

using System;

/// <summary>

/// 创建一个获取字符串数据的接口

/// </summary>

///

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 od = new OverrideData();
        //调用Override.SetText

        od.SetText("OverrideData.SetText");
        //调用Override.GetText

        od.GetText();
    }
};


 

转载于:https://www.cnblogs.com/feima-lxl/archive/2008/04/25/1171069.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值