我知道这是一个非常基本的问题,但是一个面试官以非常棘手的方式问我,我很无助:(

我只知道接口(interface)的 Material 或理论定义,并且在我从事的许多项目中也都实现了它。但是我真的不明白为什么这样做有用。

我也不了解界面中的一件事。即例如,我们使用
conn.Dispose();在finally块中。但我看不到该类正在实现或继承IDisposable接口(interface)(SqlConnection)类。我想知道如何才能调用方法名称。同样,我也不了解Dispose方法的工作原理,因为我们需要为所有接口(interface)方法使用自己的实现来实现函数体。那么接口(interface)如何被接受或命名为契约(Contract)?直到现在,这些问题一直在我的脑海中浮现,坦率地说,我从未见过任何好的线索可以用我能理解的方式解释我的问题。

像往常一样,MSDN看起来非常可怕,并且没有清晰的界线(伙计们,请高水平开发的人为借口,我强烈认为任何代码或文章都应该引起任何人的注意,因此,就像许多其他人所说的那样,MSDN没有用)。

面试官说:

他有5种方法,并且很乐意直接在类中实现它,但是如果您必须使用Abstract类或接口(interface),则选择哪种方法,为什么?我确实回答了我在各个博客中读到的所有东西,并说了抽象类和接口(interface)的优点和缺点,但是他不相信,他正在尝试理解“为什么要使用接口(interface)”。即使我只能一次实现相同的方法,也不能改变它,但是一般来说,“为什么抽象类”还是这样。

我在网络上看不到任何地方,我可以得到一篇文章来清楚地向我解释接口(interface)及其功能。我是众多程序员之一,他们仍然不了解接口(interface)(我知道所用的理论和方法),但不满意我能清楚地理解它。

最佳答案

当您想创建类似的东西时,接口(interface)是非常好的:

using System;

namespace MyInterfaceExample
{
    public interface IMyLogInterface
    {
        //I want to have a specific method that I'll use in MyLogClass
        void WriteLog();
    }

    public class MyClass : IMyLogInterface
    {

        public void WriteLog()
        {
            Console.Write("MyClass was Logged");
        }
    }

    public class MyOtherClass : IMyLogInterface
    {

        public void WriteLog()
        {
            Console.Write("MyOtherClass was Logged");
            Console.Write("And I Logged it different, than MyClass");
        }
    }

    public class MyLogClass
    {
        //I created a WriteLog method where I can pass as a parameter any object that implements IMyLogInterface.
        public static void WriteLog(IMyLogInterface myLogObject)
        {
            myLogObject.WriteLog(); //So I can use WriteLog here.
        }
    }

    public class MyMainClass
    {
        public void DoSomething()
        {
            MyClass aClass = new MyClass();
            MyOtherClass otherClass = new MyOtherClass();

            MyLogClass.WriteLog(aClass);//MyClass can log, and have his own implementation
            MyLogClass.WriteLog(otherClass); //As MyOtherClass also have his own implementation on how to log.
        }
    }
}

在我的示例中,我可能是写MyLogClass的开发人员,而其他开发人员可以创建他们的类,并且当他们想要登录时,他们实现了IMyLogInterface接口(interface)。就像他们问我要在WriteLog()中使用MyLogClass方法需要实现什么一样。他们将在界面中找到答案。

09-11 19:48
查看更多