使用不同的构造函数实例化新对象

时间:2015-09-08 13:03:15

标签: c# oop object instance instantiation

编辑:对不起,如果这看起来有点明显/简单,我试着找到答案,但我不确定如何正确地说出来

我一直在研究一点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())不同?

任何解释都将非常感谢!

2 个答案:

答案 0 :(得分:1)

据我所知,

创建的对象的实际类型
Catalog c1 = new Catalog();

ISaveable c2 = new Catalog();

是相同的,即Catalog(调用相同的构造函数),但 referece 的类型不同;在Savec1上调用c2将调用不同的实现。

答案 1 :(得分:0)

  

现在实际的代码本身没有问题(我理解显式和   接口的隐式实现等),但它只是部分   关于上述对象c2的实际实例化。为什么是   类型(ISaveable)与构造函数不同(new Catalog())?

     

ISaveable c2 = new Catalog();

在上面的代码中,您是:

  • 创建新的Catalog对象
  • 使用ISaveable类型的变量来引用它

所以基本上你有一个Catalog的具体实现,但是你必须将它用作ISaveable