使用接口名称创建类实例的概念是什么?

时间:2013-06-20 06:46:00

标签: c# .net interface object-oriented-analysis

什么是设置变量或对象的概念或者我不知道当我创建类的实例并且在左手中放入接口的名称时它被调用了什么,我知道我们无法创建和对象的类型界面。

当我声明这些类型的对象时,我只需要更清楚地说明这个过程命名的内容或.Net所做的详细信息。

IDataReader oSQLReader = new SqlDataReader();
IDataReader oOLEReader = new OleDbDataReader();

3 个答案:

答案 0 :(得分:3)

确切地说,您正在创建特定类的实例,然后您向上转发对接口类型的引用。

引用的类型定义了您可以在实例中访问的内容。您只能使用该接口知道的类的成员。

对象的实际类型仍然是您创建的实例的类型,因此您可以再次向下转换对该类型的引用:

SqlDataReader reader = (SqlDataReader)oSQLReader;

答案 1 :(得分:0)

概念很简单:

public class Cat : IAnimal {
     public void Voice() {//implements IAnimal's method
         Console.WriteLine("Miyaoo");
     }
}

public class Dog: IAnimal {
     public void Voice() {  //implements IAnimal's method
         Console.WriteLine("Woof");
     }
}

public interface IAnimal {
      public void Voice();
}
初始化后

IAnimal animal1 = new Cat(); 
IAnimal animal2 = new Dog(); 

以及代码中的某个地方

public void MakeAnimalSound(IAnimal animal) {
   animal.Voice(); 
}

所以你可以这样做:

MakeAnimalSound(animal1); //prints "Mew" even if type is IAnimal
MakeAnimalSound(animal2); //prints "Woof" even if type is IAnimal

这是多态

答案 2 :(得分:0)

这里的概念是完成设计原则“程序到界面,而不是实现”。

这里的接口可以是抽象类或实际接口。具体类将具有通过接口暴露给外部世界的实际实现。 客户端代码将使用接口访问该功能,防止他们直接创建具体类的对象,只是通过接口对象给他们访问。

这是通过我认为的OO设计模式实现的。