gpt4 book ai didi

c# - OOPS 概念 : What is the difference in passing object reference to interface and creating class object in C#?

转载 作者:可可西里 更新时间:2023-11-01 08:14:06 25 4
gpt4 key购买 nike

我有一个类 CustomerNew 和一个接口(interface) ICustomer:

public class CustomerNew : ICustomer
{
public void A()
{
MessageBox.Show("Class method");
}

void ICustomer.A()
{
MessageBox.Show("Interface method");
}


public void B()
{
MessageBox.Show("Class Method");
}
}

public interface ICustomer
{
void A();
}

我对这两行代码很困惑。

ICustomer objnew = new CustomerNew();
CustomerNew objCustomerNew = new CustomerNew();
objnew.B(); // Why this is wrong?
objCustomerNew.B(); // This is correct because we are using object of class

第一行代码意味着我们在 objnew 中传递 CustomerNew 类的对象引用,我说得对吗?如果是,那为什么我不能使用 interface objnew 访问类的方法 B()?

谁能详细解释一下这两个。

最佳答案

接口(interface)有许多特性和用途,但一个核心问题是能够在商定的契约(Contract)中向外界展示功能。

让我举个例子。考虑一台汽水自动售货机。它有一两个插槽供您投入硬币,几个按钮供您选择正确类型的苏打水和一个分配苏打水的按钮(除非选择按钮也可以)。

现在,这是一个界面。这隐藏了界面背后机器的复杂性,并为您提供了一些选择。

但是,这里是重要的部分,内部机器有很多功能,它甚至可能有其他按钮和旋钮,通常供维护人员在需要时测试或操作机器有什么不对劲,或者当他们为了钱而不得不清空它或装满苏打水时。

机器的这部分对你是隐藏的,你只能访问外部接口(interface)的创建者添加到该接口(interface)的任何内容。

你甚至不知道机器在幕后实际是如何运作的。我可以创建一个新的自动售货机,从附近的工厂传送苏打水,并将你直接添加的硬币传送到银行,你不会更聪明。更不用说我会很有钱了,但那是另一回事了。

那么,回到您的代码。

您将 objnew 显式声明为 ICustomer。无论您将什么放在 后面,这个界面都是隐藏的。您只能访问声明为作为该接口(interface)的一部分的任何内容。

另一个变量被声明为具有底层对象的类型,因此您可以完全访问其所有公共(public)功能。可以把它想象成解锁自动售货机并在正面打开的情况下使用它。

关于c# - OOPS 概念 : What is the difference in passing object reference to interface and creating class object in C#?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30570185/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com