gpt4 book ai didi

c# - 关于 C# OOPS virtual/override 关键字的使用

转载 作者:行者123 更新时间:2023-11-30 20:52:46 25 4
gpt4 key购买 nike

只看到这个程序

class A
{
public void Foo() { Console.WriteLine("A::Foo()"); }
}

class B : A
{
public void Foo() { Console.WriteLine("B::Foo()"); }
}

class Test
{
static void Main(string[] args)
{
A a;
B b;

a = new A();
b = new B();
a.Foo(); // output --> "A::Foo()"
b.Foo(); // output --> "B::Foo()"

a = new B();
a.Foo(); // output --> "A::Foo()"
}
}

1) 如何类可以有同名函数。当类 b 指向 A 时,类 A 具有 foo() 函数,类 b 具有 foo() 函数。为什么上面的代码运行没有任何错误?

2)

        a = new B();
a.Foo(); // output --> "A::Foo()"

a=new B() 是什么意思?

如果是,我们是否正在创建 B 的实例,那么当我们编写 a.Foo() 时,b 类的 foo() 函数应该被调用,但是 a 类的 foo() 函数被调用了,为什么??

当我们添加 virtual/override 关键字时,将调用类 b 的 foo() 函数。

class A
{
public virtual void Foo() { Console.WriteLine("A::Foo()"); }
}

class B : A
{
public override void Foo() { Console.WriteLine("B::Foo()"); }
}

class Test
{
static void Main(string[] args)
{
A a;
B b;

a = new A();
b = new B();
a.Foo(); // output --> "A::Foo()"
b.Foo(); // output --> "B::Foo()"

a = new B();
a.Foo(); // output --> "B::Foo()"
}
}

所以请解释一下幕后发生的事情。谢谢

最佳答案

when class b extend a then by inheritance class b got the function called foo(). why the above code run without any error ?

因为 B 中的成员只是 隐藏 A 中的成员。

what is the meaning of a=new B() ?

由于 B 实现了 A,您正在创建 B 的实例并将其键入为 A你在其他任何地方都使用它。这就是为什么 A 类中的函数被调用而不是 B 的原因。

when we add virtual/override keyword then foo() function of class b is getting called.

B 在这里被调用的原因是因为它实际上覆盖 A 的功能。

关于c# - 关于 C# OOPS virtual/override 关键字的使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20613777/

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