当前位置: 首页 > 知识库问答 >
问题:

为什么最后 2 行输出它们是什么?

卫焕
2023-03-14

有人可以帮我理解吗

  1. 此语句是否正确:Baseclass bcdc=new Dervedclass();这意味着bcdc是Baseclass类类型,其值是Dervedclass对象类型?此外,这是什么意思,为什么一个对象会这样实例化,而不是让类类型与正在实例化的新对象相同,如Dervedclass dc=new Dervedclass()
  2. 为什么bcdc.方法1()=
class BaseClass  
{  
    public virtual void Method1()  
    {  
        Console.WriteLine("Base - Method1");  
    } 
    public void Method2()  
{  
    Console.WriteLine("Base - Method2");  
} 
}  
  
class DerivedClass : BaseClass  
{  
    public override void Method1()  
{  
    Console.WriteLine("Derived - Method1");  
}  
    public new void Method2()  
    {  
        Console.WriteLine("Derived - Method2");  
    }  
}
class Program  
{  
    static void Main(string[] args)  
    {  
        BaseClass bc = new BaseClass();  //bc is of type BaseClass, and its value is of type BaseClass
        DerivedClass dc = new DerivedClass();  //dc is of type DerivedClass, and its value is of type DerivedClass
        BaseClass bcdc = new DerivedClass();  //bcdc is of type BaseClass, and its value is of type DerivedClass.
                     
        bc.Method1();  //Base - Method1 
        bc.Method2();  //Base - Method2
        dc.Method1();  //Derived - Method1
        dc.Method2();  //Derived - Method2 
        bcdc.Method1(); //Derived - Method1. ??
        bcdc.Method2(); //Base - Method2.  ??
    }   
} ```

共有1个答案

康锦
2023-03-14
匿名用户

这意味着bcdc属于BaseClass类类型,其值属于DerivedClass对象类型。

是的。然而,我更愿意称它为带有< code>BaseClass引用的< code>DerivedClass对象

此外,这意味着什么,为什么要这样实例化一个对象,而不是像DerivedClass dc = new DerivedClass()中那样让类类型与被实例化的新对象相同?

一种情况是当您想要调用显式接口方法时。然而,如果您调用一个方法,则会发生一个非常相似且更常见的情况:< code > my method(base class bcdc)。

在这个简单的程序中,所有类型在编译时都很容易知道。但是对于较大的程序来说,情况并非如此,一个方法采用一个Baseclass参数,该参数可以有一堆不同的实现,并且在编译代码时可能不知道所有的实现。

为什么bcdc。方法1()=

是的,对于标记为虚拟的方法,编译器将插入一个检查,根据实际的对象类型(即< code>DerivedClass)将方法调用转发给重写的方法。这有时被称为虚拟调度或动态调度。即该方法将在运行时基于对象类型被动态选择。

为什么是bcdc。Method2() =

方法2不是虚拟的,因此不会有动态调度。因此,引用类型(即 BaseClass)将用于确定被调用的方法。这称为静态调度,即调用的方法可以在编译时静态确定。

 类似资料:
  • 问题内容: 在“ Python编程 ”中,提到了。我来自背景,以前没有听说过这个词。什么是? 在本示例的两行之间进行阅读(我已经链接了它,因为它很长),我认为这是使用多重继承来扩展类而不是“适当的”子类的一种情况。这是正确的吗? 为什么我要这样做而不是将新功能放入子类中?因此,为什么混合/多重继承方法比使用组合更好? 什么将mixin与多重继承分开?这仅仅是语义问题吗? 问题答案: 是一种特殊的多

  • 问题内容: 今天,我浏览了该站点上的一些问题,发现提到了 以单例模式使用的这种解决方案声称具有线程安全性的优点。 我从未使用过,并且使用Java编程已经有两年多了。显然,他们改变了很多。现在,他们甚至在自己内部提供了对OOP的全面支持。 现在为什么要在日常编程中使用枚举?为什么? 问题答案: 当变量(尤其是方法参数)只能从一小部分可能的值中取出一个时,应始终使用枚举。例如类型常量(合同状态:“永久

  • 问题内容: 我对Maven快照的含义以及为什么要构建一个快照感到困惑。 问题答案: Maven中的快照版本尚未发布。 这个想法是,前一个版本(或任何其他版本)完成后,存在一个。那个版本可能会变成 。它基本上是“ 开发中”。这可能接近实际发行版,或相当遥远(0.9例如,发行后立即发行)。 “真实”版本和快照版本之间的区别在于快照可能会得到更新。这意味着今天下载的文件可能不同于昨天或明天下载的文件。

  • 我想5是int。但没有变数。我不知道为什么输出是双倍。我已经试过Netbeans了。

  • 问题内容: 我正在研究Swing程序中文本组件的结构。 据我了解,本质上分为视图和模型。该模型是实现的类的实例,该类包含所有文本并提供操作文本的方法,而View则以可视方式呈现文本。 但是我不知道使用an的确切位置,方式和原因。我不确定是否封装(“拥有”)模型(),或者文档是否封装了模型。而且不确定所有这些视图在哪里适合。 有两个问题: 1- 请描述视图之间的关系和在。什么封装了什么,什么与什么相

  • 问题内容: 为什么 初始空间 大于“ 10”的“ 2”? 我在latin1和utf8英语归类中都尝试过: 我知道它与类型有关,因为当它被强制转换时,它可以按预期工作: 这里到底发生了什么? 编辑: 以上所有操作都是在Fedora 13中使用8.4.8完成的。但是我只是在Centos 6中使用9.04进行了测试,结果相同: 数据库清单 新编辑: 这是为了进一步混淆: 问题答案: 我认为Postgre