我一直在研究一点C#而且我在实例化新对象时遇到了一些麻烦,其中构造函数和类类型不同。因此,常规对象将通过以下方式实例化:
Object obj = new Object();
这很明显,但是因为我一直在研究接口,所以我遇到了一些语法如下:
interface ISaveable {
string Save();
}
public class Catalog : ISaveable {
string Save() {
return "Catalog Save";
}
string ISaveable.Save(){
return "ISaveable Save";
}
}
然后教程继续做了一些事情:
Catalog c1 = new Catalog();
所以我知道这里正在实例化一个新的目录类实例,但是我不能为我的生活找到下一行:
ISaveable c2 = new Catalog();
现在实际的代码本身没有问题(我理解接口的显式和隐式实现等),但它只是关于上述对象c2的实际实例化的部分。为什么类类型(ISaveable)与构造函数(new Catalog())不同?
任何解释都将非常感谢!
答案 0 :(得分:1)
据我所知,
创建的对象的实际类型Catalog c1 = new Catalog();
和
ISaveable c2 = new Catalog();
是相同的,即Catalog
(调用相同的构造函数),但 referece 的类型不同;在Save
和c1
上调用c2
将调用不同的实现。
答案 1 :(得分:0)
现在实际的代码本身没有问题(我理解显式和 接口的隐式实现等),但它只是部分 关于上述对象c2的实际实例化。为什么是 类型(ISaveable)与构造函数不同(new Catalog())?
ISaveable c2 = new Catalog();
在上面的代码中,您是:
Catalog
对象ISaveable
类型的变量来引用它所以基本上你有一个Catalog
的具体实现,但是你必须将它用作ISaveable
。