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

标签 c# oop object instance instantiation

<分区>

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

我一直在学习一些 C#,但在理解实例化的新对象时遇到了一些麻烦,其中构造函数和类类型不同。因此,常规对象将通过以下方式实例化:

Object obj = new Object();

这很明显,但是由于我一直在研究接口(interface),所以我遇到了如下语法:

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();

现在实际的代码本身没有问题(接口(interface)的显式和隐式实现等我都懂),只不过是上面对象c2实际实例化的部分而已。为什么类类型 (ISaveable) 与构造函数 ( new Catalog() ) 不同?

任何解释将不胜感激!

最佳答案

据我了解,

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

ISaveable c2 = new Catalog();

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

关于c# - 使用不同的构造函数实例化新对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32458586/

相关文章:

c# - 为什么我的线程卡在 Entity Framework SaveChangesAsync 中?

c++ - 为什么赋值运算符同时调用复制构造函数和赋值运算符?

javascript - 为对象的键定义值时未定义

java - java中如何对中奖率进行排名

c# - DATABASE 和 DATATABLE 之间的重复检查

c# - 动态选项对话框(使用反射)

php - PHP 方法链接

c# - 所有使用 C# 开发的应用程序都不是面向对象的?

java - java中是否可以使一个对象在程序中的任何地方都可用?

C# 加载 xlsx 文件性能不好