【发布时间】:2015-12-04 04:26:36
【问题描述】:
编辑:抱歉,如果这看起来有点明显/简单,我尝试找到答案,但我不知道如何正确表达它
我一直在学习一点 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())不同?
任何解释将不胜感激!
【问题讨论】:
-
这里想说什么:为什么类类型(ISaveable)与构造函数(new Catalog())不同?
-
您对术语“构造函数”和“显式接口实现”的使用增加了噪音。这只是关于对象类型和引用。
-
目录类实现了 ISaveable 接口。因此,您可以像 ISaveable 一样声明 c2,然后将其实例化为 Catalog 类型的对象。如果你有另一个名为 Catalog2 的类,你可以这样做: ISaveable c2 = new Catalog2();
-
“类类型”与构造函数没有区别,变量的声明类型与被实例化对象的运行时类型不同。 c2 仍然是
Catalog它只是被声明为 ISaveable。与object obj = new SomeOtherType()之类的操作没有什么不同 -
@BenRobinson 这是我不太明白的一件事,因为我已经开始学习 OOP,所以我总是使用相同的变量类型和运行时类型声明对象(就像在我的第一个代码块中一样更多);我从来没有在对象的运行时类型与变量的声明类型不同的情况下这样做=/
标签: c# oop object instance instantiation