gpt4 book ai didi

c# - 为什么包含对 B 类型对象的引用的 A 类型引用变量不能访问 B 类的成员函数?

转载 作者:行者123 更新时间:2023-11-30 21:36:43 25 4
gpt4 key购买 nike

为什么 objA 不能访问 methodB(),因为它包含对 B 类类型对象的引用?

Class A 
{
public void methodA()
{
.........
}
}

Class B:A
{
public void methodB()
{
..........
}
}

现在

A obj1= new B();

这会引发错误:

obj1.methodB();

为什么? obj1 包含对类型 B 对象的引用,但仍然无法访问它的成员函数。

最佳答案

您声明了 A 类型的变量:

A obj1

A 没有名为methodB 的方法。如果您希望变量B 类型,请将其声明为:

B obj1= new B();

(这当然意味着您不能在该变量中存储 A 的任何其他实现,只能存储 B。)

或者,如果您不想更改变量,则需要转换变量:

(obj1 as B).methodB();

(如果 obj1 曾经包含 A 的实现,但不是 B,这当然会失败>.)

基本上,当您声明A 类型的变量时,编译器会将其维护为A 类型。声明后的任何时候都不能保证变量将包含 B 的实例。我可以包含一个实现 Aanything 实例。

关于c# - 为什么包含对 B 类型对象的引用的 A 类型引用变量不能访问 B 类的成员函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47924409/

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