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

什么是set变量或对象的概念,或者我不知道当我创建类的实例并将左侧接口名称放入时调用它,我知道我们不能创建类型接口的对象。

当我声明这些类型的对象时,我只需要更多地澄清这个过程命名的内容或.Net所做的细节是什么。

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

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

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

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

 SqlDataReader reader = (SqlDataReader)oSQLReader; 

概念很简单:

 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 

这是多态性

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

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

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