C#接口实例的类似特性... 帮助我理解

20 浏览
0 Comments

C#接口实例的类似特性... 帮助我理解

可能重复:

接口:为什么我似乎无法掌握它们?

为了使用我刚找到的一个库,我需要先实现一些接口。但是某些方法似乎要求对象具有某些接口的类型...

如果我有一个名为MyInterface的接口,我可以这样写:

    MyInterface shoe;

这对我来说真的没有意义。有人能教我这个概念吗?

我阅读了这篇文章:http://www.dotnetperls.com/interface,但它并没有真正帮助我,我认为这个概念比这里介绍的要复杂一些。

谢谢!

编辑:

对于那些好奇的人,我不是对接口不熟悉,但这是我第一次遇到这样的使用方式。对于那些给我问题打分降级的人,我确实搜索过,但显然不幸。

0
0 Comments

C#接口的实例化问题以及解决方法

在C#中,接口是一种描述类应该具备能力的合同。一个类实现接口时必须遵守合同中规定的要求。接口的存在是为了解决多继承问题,通过接口,一个类可以实现多个不同的接口,实现多态性。

下面的代码示例展示了如何使用接口实例化对象:

public class Train
{
    private float price;
    public Train(float price) { this.price = price; }
}
public interface ITrainProducer
{
   Train MakeTrain();
}
public class ExpensiveTrainFactory : ITrainProducer
{
    public Train MakeTrain() { return new Train(4000.0); }
}
public class CheapTrainFactory : ITrainProducer
{
    public Train MakeTrain() { return new Train(500.0); }
}
public class NationalRailways
{
    List trains;
    public NationalRailways()
    {
        this.trains = new List();
    }
    public void BuyTrain(ITrainProducer factory)
    {
        trains.Add(factory.MakeTrain());
    }
}

在上述代码中,`ExpensiveTrainFactory`和`CheapTrainFactory`类都实现了`ITrainProducer`接口,分别可以生产昂贵的火车和廉价的火车。`NationalRailways`类中的`BuyTrain`方法接收一个`ITrainProducer`接口类型的参数,可以接受任何实现了该接口的类的实例作为参数。

使用示例:

NationalRailways railway = new NationalRailways();
ExpensiveTrainFactory expFactory = new ExpensiveTrainFactory();
CheapTrainFactory cheapFactory = new CheapTrainFactory();
railway.BuyTrain(expFactory);
railway.BuyTrain(cheapFactory);

上述示例代码中,我们实例化了`NationalRailways`类的对象`railway`,然后分别实例化了`ExpensiveTrainFactory`和`CheapTrainFactory`类的对象`expFactory`和`cheapFactory`。由于这两个类都实现了`ITrainProducer`接口,所以我们可以将它们作为参数传递给`BuyTrain`方法。

通过这种方式,我们可以实现类之间的松耦合,调用方只需要知道接口的方法,而不需要关心具体的实现类。这样可以提高代码的可维护性和灵活性,方便后续的扩展和修改。

总结一下,C#中接口的实例化问题是为了实现类之间的松耦合,使代码更加灵活和可维护。通过定义接口和实现接口的类,可以实现多态性,并减少对具体实现类的依赖。这种方式可以提高代码的可扩展性和可重用性。

0
0 Comments

C#中的接口是一种描述合同的方式,它没有具体的实现细节,因此不能直接实例化一个接口。但是可以通过实现接口的类来创建实例。

在上述代码中,声明了一个接口MyInterface,但是不能直接实例化它,因为它只描述了一个合同,没有具体的实现细节。我们可以创建一个类SomeClass来实现MyInterface的合同,然后通过实例化SomeClass来创建一个MyInterface类型的对象。

这样做的好处是,我们可以定义一个方法,该方法的参数类型是MyInterface,然后可以将实现了MyInterface的任何类的对象传递给该方法。在方法内部,可以调用接口中定义的方法,而不需要知道确切的对象类型,这样可以更方便地编写未来的代码。只要对象实现了MyInterface,就可以将其传递给someMethod方法,而不需要修改方法的声明。

这个概念与抽象类的概念相似,都是通过定义合同或者接口来实现代码的重用性和扩展性。

0
0 Comments

C#中接口实例化的问题以及解决方法

在C#中,我们无法直接创建接口的实例,但是我们可以创建实现该接口的某个类型的实例。具体来说,我们可以定义一个接口和一个实现该接口的类,然后通过实例化该类来创建接口的实例。

首先,我们定义一个接口IMyInterface,其中包含一个方法DoSomething()。

接口定义如下:

public interface IMyInterface
{
   void DoSomething();
}

接下来,我们定义一个类MyClass,该类实现了IMyInterface接口,并实现了DoSomething()方法。

类定义如下:

public class MyClass: IMyInterface
{
    public void DoSomething() { ... }
}

接着,我们可以通过实例化MyClass类来创建IMyInterface接口的实例。

示例代码如下:

IMyInterface something = new MyClass();

当然,通常情况下,我们会通过某个方法(例如工厂方法)返回一个实现了该接口的类的实例,而不是直接使用new关键字来实例化。

通过使用接口作为变量的类型,我们指定了我们只对接口中指定的方法和属性感兴趣。

接口实例化的特点是能够实现多态性,即我们可以拥有一个包含不同对象(例如数据源)的集合,这些对象都具有相同的接口但实现方式不同(例如平面文件、XML文件和数据库),从而可以在不修改使用这些对象的类的情况下进行混合、匹配和修改。

另外,接口实例化还可以用于接受该接口类型的参数,这意味着任何实现了该接口的类都可以被接受,包括我们自己编写的类。

总结一下,尽管在某些情况下使用抽象类可以实现多态性,但在使用接口的情况下,我们可以更灵活地处理不同类型的对象,并且不需要修改使用这些对象的类。因此,在C#中,接口实例化是一种非常强大和常用的特性。

0