使用接口名称创建类实例的概念是什么?
什么是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设计模式实现的。