c#接口深入一步探究其作用,适合新人了解

前言

  前一篇浅显的述说了一下c#接口的作用,并用了一个不怎么好的例子述说了一下。时隔一天,在看完大家的评论后我在论坛中查看了很多前辈们对c#接口的描述,发现大家对例子的说明不是太容易让我们这些新人理解。接下来,就用我这个新手的角度再来阐述一遍。哈哈哈哈……

理论改编故事

  A公司在经过“百兽齐鸣”的事件后汲取了教训,老王也开始用接口这个东西来进行项目的管理。为此,他轻松了不少,沾沾自喜中也就没有去探究接口的其它作用了(没有影射大家,纯属为了编故事)。

  这天,A公司下达了一个新的需求,需要实现由某一个人带着一种动物出去遛弯。老王看到这个需求,轻哼一声:我有接口我怕谁,改接口让小的们去实现相关行为去。

  老王在接口中加了一个 void Walk(string people);下达命令,小的们,赶快实现各个动物中的行为,我要遛弯啦!哈哈哈

  大家匆匆实现好了各自动物的Walk行为后老王就开始来实现某人带动物遛弯的功能了。

  然后他写出了这种代码:

  

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace InterfaceProject
{
    /// <summary>
    /// 人
    /// </summary>
    public class People
    {
        /// <summary>
        /// 姓名
        /// </summary>
        private string name;

        public string Name
        {
            get { return name; }
            set { name = value; }
        }
        #region 带动物遛弯
        public void WalkWithAnimal(Dog dog)
        {
            dog.Walk(this.name);
        }
        public void WalkWithAnimal(Cat cat)
        {
            cat.Walk(this.name);
        }
        public void WalkWithAnimal(Pig pig)
        {
            pig.Walk(this.name);
        }
        #endregion
    }
}

  就这样,安稳过了一段时间。突然有一天,A公司来了一批新动物分发到了各个程序员手中,大家快速的完成了各个动物类。

  这时,老王傻眼了。卧槽,这尼玛有1000多个动物,我得写1000个遛弯的东西啊!!!!!天啦!

  老王现在知道了问题所在,立马在Zenkey的博客中查找解决方案,终于,他发现了这篇文章(哈哈哈哈)

  在寻求了解决方法后,他立马改了代码又去得意去了……

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace InterfaceProject
{
    /// <summary>
    /// 人
    /// </summary>
    public class People
    {
        /// <summary>
        /// 姓名
        /// </summary>
        private string name;

        public string Name
        {
            get { return name; }
            set { name = value; }
        }
        public People(string name)
        {
            this.Name = name;
        }
        #region 带动物遛弯
        public void WalkWithAnimal(IAnimal animal)
        {
            animal.Walk(this.name);
        }
        //public void WalkWithAnimal(Dog dog)
        //{
        //    dog.Walk(this.name);
        //}
        //public void WalkWithAnimal(Cat cat)
        //{
        //    cat.Walk(this.name);
        //}
        //public void WalkWithAnimal(Pig pig)
        //{
        //    pig.Walk(this.name);
        //}
        #endregion
    }
}

  得意之余,带所有动物轮流遛弯去!!!

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace InterfaceProject
{
    class Program
    {
        static void Main(string[] args)
        {
            //百兽齐鸣(这里可以使用反射来初始化所有继承IAnimal的所有动物,我就不写这个了,主要看接口)
            List<IAnimal> animals = new List<IAnimal>();
            IAnimal dog = new Dog();
            animals.Add(dog);
            IAnimal cat = new Cat();
            animals.Add(cat);
            IAnimal pig = new Pig();
            animals.Add(pig);

            //老王王带所有动物都遛一遍
            People p = new People("老王");
            for (int i = 0; i < animals.Count; i++)
            {
                p.WalkWithAnimal(animals[i]);
            }
        }
    }
}

总结

  不知道大家根据这个故事都理解到了什么,这篇文章后我也就不再探究接口的作用了,目前在公司中用接口的这些功能已经让我轻松了不少,希望所有新手都能在我这里将接口这个神物摸索清楚。

  如果有看不明白的请结合上一篇浅谈c#接口来看。

  如果大家赞同请点赞,如果我述说的有不妥的地方希望大家海涵并指出,我们共同进步。

  

  

时间: 2024-11-09 03:24:25

c#接口深入一步探究其作用,适合新人了解的相关文章

php 接口类与抽象类的实际作用

1.php 接口类:interface 其实他们的作用很简单,当有很多人一起开发一个项目时,可能都会去调用别人写的一些类,那你就会问,我怎么知道他的某个功能的实现方法是怎么命名的呢,这个时候php接口类就起到作用了,当我们定义了一个接口类时,它里面的方式是下面的子类必须实现的,比如 : interface Shop { public function buy($gid); public function sell($gid); public function view($gid); } 我声明一

Hibernate常用的接口和类---Configuration类和作用

Configuration作用: 加载Hibernate配置文件,可以获取SessionFactory对象 加载方式: 1.加载配置文件 Configuration configuration = new Configuration(); 2.加载映射文件 使用porperties配置文件的方式 configuration.addResource("cn/itcast/domain/Student.hbm.xml"); 使用XML配置文件的方式 config.configure();

Hibernate常用的接口和类---SessionFactory类和作用

是一个生成Session的工厂类 特点: 1.由Configuration通过加载配置文件创建该对象. SessionFactory factory = config.buildSessionFactory(); 2.SessionFactory对象中保存了当前的数据库配置信息和所有映射关系以及预定义的SQL语句.同时,SessionFactory还负责维护Hibernate的二级缓存. 3.一个SessionFactory实例对应一个数据库,应用从该对象获得Session实例. 4.Sessi

php抽象类与接口的实际作用

1.php 接口类:interface 其实他们的作用很简单,当有很多人一起开发一个项目时,可能都会去调用别人写的一些类,那你就会问,我怎么知道他的某个功能的实现方法是怎么命名的呢,这个时候php接口类就起到作用了,当我们定义了一个接口类时,它里面的方式是下面的子类必须实现的,比如 : interface Shop { public function buy($gid); public function sell($gid); public function view($gid); } 我声明一

我的设计接口总结以及生成帮助文档

前言:在工作发现接口至关重要,特别需要把接口的注释写清楚,能调用的同事知道这个接口是干嘛用的,要传递什么参数等,在这里我做了一个简单的接口并生成帮助帮助,供大家相互学习,有好的可以提出来我继续改进. 第一步:建立一个用户接口(明确这个接口的作用) 按照Add,Delete,Update,Get模式来定义接口的方法(我个人觉得尽可能的重载) 第二步:方法中写出尽可能详尽的注释 按照方法实现的功能,参数意思,异常,备注,返回值等来写 第三步:接口中如果出现参数为类型的时候千万不要用1,2这样的数值代

Java 函数式接口

目录 Java 函数式接口 1. 函数式接口 1.1 概念 1.2 格式 1.3 函数式接口的使用 2. 函数式编程 2.1 Lambda的延迟执行 2.2 使用Lambda作为方法的参数&返回值 3. 常用的函数式接口 3.1 Supplier<T>接口 3.2 Consumer<T>接口 3.3 Predicate<T>接口 3.4 Function<T, R>接口 Java 函数式接口 1. 函数式接口 1.1 概念 函数式接口:有且只有一个抽

php学习笔记 面向对象中[接口]与[多态性]的应用

代码如下: <?php /* 接口技术 * * 接口是一种特殊的抽象类,抽象类又是一种特殊的类 * * 接口和抽象类是一样的作用 * * 因为在PHP是单继承的,如果使用抽象类,子类实现抽象类就不能再去继承其他的类了 * * 如果既想实现一些规范,又想继承其他类.就要使用接口. * * 接口和抽象类的对比 * * 1.作用相同,都不能创建对象,都需要子类去实现 * * 2.接口的声明和抽象类不一样 * * 3.接口被实现方式不一样 * * 4.接口中的所有方法必须是抽象方法,只能声明抽象方法(不

多态的概念和作用(深入理解)

多态是面向对象的重要特性,简单点说:“一个接口,多种实现”,就是同一种事物表现出的多种形态.编程其实就是一个将具体世界进行抽象化的过程,多态就是抽象化的一种体现,把一系列具体事物的共同点抽象出来, 再通过这个抽象的事物, 与不同的具体事物进行对话.对不同类的对象发出相同的消息将会有不同的行为.比如,你的老板让所有员工在九点钟开始工作, 他只要在九点钟的时候说:“开始工作”即可,而不需要对销售人员说:“开始销售工作”,对技术人员说:“开始技术工作”, 因为“员工”是一个抽象的事物, 只要是员工就可

针对面向对象接口--最诡异的解读

1.接口最基本的作用就是作为一个客观的规范 是一类事物所具有的属性的总结 相当于父类举例说明下 人 有身高这个属性 有吃饭这个方法 有痛了就喊"妈呀"这个事件OK 这样就可以把这些属性,方法,事件总结起来定义一个接口 叫"人类"(这里的LogHandler OnLog就是一个事件 下面会具体讲到) 2.接口还有一个最基本的作用(也是父类所没有的)——多态估名思义 人具有多种"态" 比如某个人却实具有了人类的所有属性 但是很特别 这个人还具备一般人