【转】C#笔记之接口(Interface)

原文: 小贱学C#笔记之接口(Interface)

与各个大牛比起来,我还是个刚接触游戏开发不久的新手。但是我总不能一直停留在崇拜他们的阶段,只有不断的去学习,去熟悉,才有可能有一天也被别人崇拜。好了废话不必太多,十几年的学校生涯让我知道,有时候把自己新学到的知识整理分享出来,能让记忆更加深刻。

今天我来整理一下接口的相关。对于大多刚接触编程的新手来说,应该总有想法觉得,接口是个没什么用的东西(之前我也是)。感觉接口中就是声明了点属性,还有方法名,没什么实际意义。现在我不多做解释,先来使用一下接口,说不定用完突然就觉得还挺好使的呢!

比如我们现在做一个FPS游戏,里面玩家可以选择三种职业的兵种:步兵,坦克兵,治疗兵。他们都有自己的专属技能UseRPG(),DriveTank(),Treat(),而且他们都有通用技能Walk(),Run(),Shoot()。好了,前面的都是前提,现在开始写代码,先写接口IPlayer。

[code]csharpcode:

using System;
using System.Collections.Generic;

interface IPlayer
{
    // 这里写的都是通用技能
    void Walk(); // 一定要记得这些方法都不用加修饰符的 比如public、protected
    void Run();
    void Shoot();
}

接下去我们就该写具体的兵种的类了

[code]csharpcode:

using System;
using System.Collections.Generic;

class Infantry : IPlayer // 具体的兵种类都要使用这个接口
{
    //下面三个通用技能是必须要在这个类里面实现的,少一个都会编译错误的
    public void Walk()
    {
        // 写具体的Walk方法的内容
        Console.WriteLine("Infantry is walking");
    }

    public void Run()
    {
        // 写具体的Run方法的内容
        Console.WriteLine("Infantry is Running");
    }

    public void Shoot()
    {
        // 写具体的Shoot方法的内容
        Console.WriteLine("Infantry is Shooting");
    }

    // 当把接口里的方法都实现了,我们就可以写每个职业的专属技能了,但是就算这个就算不写也是可以编译通过的哦。所以写不写就看你项目的具体情况了
    public void UseRPG()
    {
        Console.WriteLine("Infantry is useRPGing");
    }
}

然后另外两个也照着第一个写

[code]csharpcode:

using System;
using System.Collections.Generic;

class Tankman: IPlayer // 具体的兵种类都要使用这个接口
{
    //下面三个通用技能是必须要在这个类里面实现的,少一个都会编译错误的
    public void Walk()
    {
        // 写具体的Walk方法的内容
        Console.WriteLine("Tankman is walking");
    }

    public void Run()
    {
        // 写具体的Run方法的内容
        Console.WriteLine("Tankman is Running");
    }

    public void Shoot()
    {
        // 写具体的Shoot方法的内容
        Console.WriteLine("Tankman is Shooting");
    }

    // 当把接口里的方法都实现了,我们就可以写每个职业的专属技能了,但是就算这个就算不写也是可以编译通过的哦。所以写不写就看你项目的具体情况了
    public void DriveTank()
    {
        Console.WriteLine("Tankman is driveTanking");
    }
}

[code]csharpcode:

using System;
using System.Collections.Generic;

class Medic: IPlayer // 具体的兵种类都要使用这个接口
{
    //下面三个通用技能是必须要在这个类里面实现的,少一个都会编译错误的
    public void Walk()
    {
        // 写具体的Walk方法的内容
        Console.WriteLine("Medic is walking");
    }

    public void Run()
    {
        // 写具体的Run方法的内容
        Console.WriteLine("Medic is Running");
    }

    public void Shoot()
    {
        // 写具体的Shoot方法的内容
        Console.WriteLine("Medic is Shooting");
    }

    // 当把接口里的方法都实现了,我们就可以写每个职业的专属技能了,但是就算这个就算不写也是可以编译通过的哦。所以写不写就看你项目的具体情况了
    public void Treat()
    {
        Console.WriteLine("Medic is treating");
    }
}

Ok,三个兵种的类搞定了,观察一下,三个兵种类有什么不同。1.类名;2.三个通用技能的内容;3.有各自的专属技能。直白的来说,这几个不同的地方你可以放心的改成你想要的内容。现在我们来使用一下这三个类。我们要三个兵种都Run一下,然后他们各自使用他们的专属技能,下面是代码:

[code]csharpcode:

using System;
using System.Collections.Generic;

class War
{
    static void Main(string[] args)
    {
        // 这里相当是三个玩家分别建立了三个不同兵种的角色
        Infantry player0 = new Infantry();
        Tankman player1 = new Tankman();
        Medic player2 = new Medic();

        // 然后他们都先跑了一段路
        player0.Run();
        player1.Run();
        player2.Run();

        // 玩家0使用RPG导弹;玩家1驾驶坦克;玩家2使用医疗技能
        player0.UseRPG();
        player1.DriveTank();
        player2.Treat();

        Console.ReadKey();
    }
}

我们来看下结果是不是按照我们也的流程来执行的

以上就是接口的简单应用了,我们来总结下:

接口的用法:

1.接口里写的都是通用的东西,比如,我准备写“猪”,“狗”,“猫”等等,那我就写个“动物”接口,这些动物都能“跑”,“跳”,“叫”,那么“动物”接口就声明“跑”,“跳”,“叫”这三个方法;2.具体类里必须实现接口中的所有方法,就是说“猪”,“狗”,“猫”类中必须都有“跑”,“跳”,“叫”方法;3.具体类里可以有接口中没有的方法,比如“猪”有个“拱白菜”的方法,“狗”和“猫”没有这个方法。

接口的作用:

1.统一管理:不管是几个人写具体类,只要他们都实现同一个接口,那他们都会知道类中那些方法是必须有的;

2.求同存异:相同的是有共同的方法,不同的是,方法实现的内容可以不同。还可以有特有的方法;

3.方便日后添加新类:比如,以后还要再加个工兵,不需要去回忆兵种都有什么通用方法,实现接口就可以了。

OK,以上就是我对接口的一些理解。可能会有一些偏差,也希望各位可以帮我指出来。之后有时间,我还好做一些另外的学习笔记。

时间: 2024-10-07 00:09:51

【转】C#笔记之接口(Interface)的相关文章

Java学习笔记之接口

一.接口的概念与定义 首先考虑一个简单的接口的定义: public interface Output { int MAX_LINE = 40; void out(); void getData(String msg); } 定义接口使用关键字interface 修饰符interface前面的public可以省略,如果省略,则采用默认访问控制,即只有在相同包结构的代码才可以访问此接口 接口不可以有构造方法(区别于类中的构造方法) 接口里面的所有成员,包括常量.方法等都是public访问权限,所以在

Learn Java for Android Development Second Edition 笔记(六)- Interface

Interface Java里用interface关键字,引入一种没有具体实现的类型. Declaring Interfaces interface一般以大写字母开头,able单词结束,如下例子: interface Drawable { int RED = 1; // For simplicity, integer constants are used. These constants are int GREEN = 2; // not that descriptive, as you wil

好程序员训练营-Java接口(interface)的概念及使用

<A href="http://www.goodprogrammer.org/" target="blank">android培训</a>------我的java笔记,期待与您交流! 在抽象类中,可以包含一个或多个抽象方法:但在接口(interface)中,所有的方法必须都是抽象的,不能有方法体,它比抽象类更加"抽象". 接口使用 interface 关键字来声明,可以看做是一种特殊的抽象类,可以指定一个类必须做什么,而不

JAVA之旅(七)——final关键字 , 抽象类abstract,模板方法模式,接口interface,implements,特点,扩展

JAVA之旅(七)--final关键字 , 抽象类abstract,模板方法模式,接口interface,implements,特点,扩展 OK,我们继续学习JAVA,美滋滋的 一.final 我们来聊聊final这个关键字 final可以修饰类,方法和变量 final修饰的类不可以被继承 final修饰的方法不可以被覆盖 final修饰的变量是一个常量,只能被赋值一次 内部类只能访问被final修饰的局部变量 final,故名思意,就是最终的意思,由以上的五种特性,不过final的出现,也是有

JavaSE入门学习21:Java面向对象之接口(interface)(二)

一接口实现的多态 在上一篇博文:JavaSE入门学习20:Java面向对象之接口(interface)(一)中提到了接口的实现存在多态性,那么 这一篇主要就要分析接口实现的多态. 实例一 Test.java源文件代码: public class Test{ public static void main(String[] args){ //实现接口Singer Singer s1 = new Student("Amy"); s1.sing(); s1.sleep(); s1.study

接口 Interface

interface 关键字 声明接口 接口中的成员默认都是public 能力不一样的时候适合用接口 using System; using System.Collections; using System.Collections.Generic; namespace Dome { class dom { static void Main(string[] args) { play iplay = new student(); iplay.iplay(); Console.WriteLine();

Android中接口(Interface)的简单使用

  Android中接口(Interface)的简单使用 Java中的接口可以被看作是只包含常量和抽象方法的抽象类 . 可以使用如下方式定义一个接口: public interface InterfaceDemo { int i = 10; void method1(); int method2(); } 使用1: 解决“多重继承”的问题 Java语言本身是不支持类的多重继承(多重继承是指一个类从多个类继承而来,即一个类拥有多个超类)的,但一个类却可以实现多个接口.这样,我们可以将一些抽象方法定

C++里的接口(Interface)

C++是允许多重继承的,而这个设计既会引起问题又不是很常用,于是java和C#都采用了另一种方式:接口(Interface).类继承(实现)接口并不表明 is-a关系,而是“有某种功能”.“符合某种性质”的关系.C++虽然语法上不支持接口,但是这个思路还是可以拿来用的嘛.比如设计这样一个接口: struct hashable { virtual size_t hash_code() = 0; }; 然后让一个类继承它,并实现函数,就代表了该类是可哈希的. 事情没这么简单,在C++里,接口还可以有

C++虚函数virtual,纯虚函数pure virtual和Java抽象函数abstract,接口interface与抽象类abstract class的比较

由于C++和Java都是面向对象的编程语言,它们的多态性就分别靠虚函数和抽象函数来实现. C++的虚函数可以在子类中重写,调用是根据实际的对象来判别的,而不是通过指针类型(普通函数的调用是根据当前指针类型来判断的).纯虚函数是一种在父函数中只定义而不实现的一种函数,不能用来声明对象,也可以被称为抽象类.纯虚函数的实现也可以在类声明外进行定义.C++中的抽象类abstract class是指至少有一个纯虚函数的类,如果一个类全部由纯虚函数组成,不包括任何的实现,被称为纯虚类. Java中的普通函数