码迷,mamicode.com
首页 > Windows程序 > 详细

C#基础系列-接口

时间:2015-10-19 10:37:07      阅读:192      评论:0      收藏:0      [点我收藏+]

标签:

前言: 完全是我在学习过程中记录的笔记,只不过分享一下让很多刚开始学习.net编程的人能够很快的学会C#语言

  1. 接口

 (1) 有时候需要考虑子类中一部分具有某些能力(方法),同时又需要考虑其多态的特征,这时候可以考虑接口

 (2)语法:

            public interface 接口名

            {

                   //成员

            }

 (3) 接口的存在就是为了被实现

 (4)有了接口以后实现该接口的子类可以赋值给这个接口的变量,就可以实现多态了

 (5)接口的存在就是为了多态

 (6)接口与类的其中一个不同点在于多"继承"(实现)

 (7)接口的使用

    interface IDriveable

              {

                     void Dirving();

              }

              class Teacher : IDriveable

              {

                     public void Dirving()

                     {

                            Console.WriteLine("终于有驾驶证了");

                     }

              }

              class Program

              {

                     static void Main(string[] args)

                     {

                            Teacher th = new Teacher();

                            th.Dirving();

                            IDriveable dir = th;

                            dir.Dirving();

                     }

              }

(8)接口的补充

       1)接口中的方法

              ->默认接口成员均是public,所以不需要考虑访问修饰符

              ->直接不写访问修饰符

                     返回值 方法名 (参数);

       2)接口的思想类中实现方法的语法:方法该怎么写就怎么写,好像没有接口存在一样

       3)接口的实现类必须实现接口中的成员

   4)接口中可以有哪些成员:抽象成员

 (9)在使用上接口与抽象类非常类似(但是接口不允许有非抽象成员,成员的语法定义不同,多继承)

 (10)在继承中有接口,又有类的时候注意:

       1)语法

              class 类名:父类,接口,接口

              {

              //成员

              }

  2)多个接口中如果有重名方法怎么办?

              ->使用显示实现接口的方式

              ->方法名是有接口名引导的

              ->方法没有访问修饰符

              ->方法不能被该类型的实例对象说调用,必须将其转换为接口类型进行调用

          

接口的实现
interface Iinter1

{

void Func();

}

interface Iinter2

{

void Func();

}

class MyClass : Iinter1, Iinter2

{

void Iinter1.Func()

{

Console.WriteLine("接口1");

}

void Iinter2.Func()

{

Console.WriteLine("接口2");

}

}

class Program

{

static void Main(string[] args)

{

MyClass m = new MyClass();

Iinter1 i1 = m;

i1.Func();

Iinter2 i2 = m;

i2.Func();

}

}


技术分享
 1                   interface Iinter1
 2 
 3                             {
 4 
 5                                    void Func();
 6 
 7                             }
 8 
 9                             interface Iinter2
10 
11                             {
12 
13                                    void Func();
14 
15                             }
16 
17                             class MyClass : Iinter1, Iinter2
18 
19                             {
20 
21                                    void Iinter1.Func()
22 
23                                    {
24 
25                                           Console.WriteLine("接口1");
26 
27                                    }
28 
29                                    void Iinter2.Func()
30 
31                                    {
32 
33                                           Console.WriteLine("接口2");
34 
35                                    }
36 
37                             }
38 
39                             class Program
40 
41                             {
42 
43                                    static void Main(string[] args)
44 
45                                    {
46 
47                                           MyClass m = new MyClass();
48 
49                                           Iinter1 i1 = m;
50 
51                                           i1.Func();
52 
53                                           Iinter2 i2 = m;
54 
55                                           i2.Func();
56 
57                                    }
58 
59                             }
技术分享

 

  1. 使用接口模仿一个山寨的暗黑游戏的接口原理

  

接口实现暗黑游戏的一点山寨
 (1) 首先新建一个控制台应用程序,自己随便起个名字

 (2)在新建一个接口,起名为interfaceModel,这个接口实现了攻击的种类

            interface IFile //火系攻击

            {

                   void Fight();

            }

            interface IIce //冰系攻击

            {

                   void Fight();

            }

 (3)其次新建一个可以实现所有攻击方法的类

            /// <summary>

            /// 一个可以实现所有方法的类

            /// </summary>

            abstract class Person

            {

                   public abstract void Gongji();

            }

 (4)新建一个fashi类,此类实现了法师的所有的攻击手段

         abstract class fashi : Person

            {

            }

            class fashi1 : fashi, IFile

            {

                   public void Fight()

                   {

                          Console.WriteLine("火攻");

                   }

                   public override void Gongji()

                   {

                          Fight();

                   }

            }

            class fashi2 : fashi, IIce

            {

                   public void Fight()

                   {

                          Console.WriteLine("冰攻");

                   }

                   public override void Gongji()

                   {

                          Fight();

                   }

            }

            class fashi3 : fashi, IFile, IIce

            {

                   public override void Gongji()

                   {

                          //随机的攻击

                          Random rand = new Random();

                          if (rand.Next() % 2 == 0)

                          {

                                 IIce i = this as IIce;

                                 i.Fight();

                          }

                          else

                          {

                                 (this as IFile).Fight();

                          }

                   }

                   void IFile.Fight()

                   {

                          Console.WriteLine("火攻");

                   }

                   void IIce.Fight()

                   {

                          Console.WriteLine("冰攻");

                   }

            }    

 (5)在main方法中实现如下函数

            static void Main(string[] args)

        {

            fashi f = new fashi3();

            while (true)

            {

                f.Gongji();

                Console.ReadKey();

            }

        }

  

 

 (6)在定义方法的时候,可以为变量赋初值,该值为默认值,如果不传参数就默认使用这个值,如果传参,使用传进来的参数替代这个值

 (7)微软推荐使用默认参数而非重载

C#基础系列-接口

标签:

原文地址:http://www.cnblogs.com/yuqlblog/p/4891015.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!