Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
虚函数的确切需求是C#?_C#_Oop - Fatal编程技术网

虚函数的确切需求是C#?

虚函数的确切需求是C#?,c#,oop,C#,Oop,我知道它提供了一个派生类可以覆盖的默认实现。 但是这就是确切的目的吗?是的,这就是确切的目的不,这不是他们确切的目的。虚拟函数是用面向对象语言实现的一种方法。要实现多态性。您现在可以拥有对基类对象的引用集合,并将对派生类对象的引用放在那里,在不知道实际派生类的情况下,通过任何引用调用虚函数,并且每次调用的派生重写函数最多。这就是所谓的多态性。需要的是派生类可以重写,并且它的行为符合您的预期 反之,在派生类上创建方法时,指定new关键字——在这种情况下,使用与变量类型匹配的函数版本,因此: der

我知道它提供了一个派生类可以覆盖的默认实现。
但是这就是确切的目的吗?

是的,这就是确切的目的

不,这不是他们确切的目的。虚拟函数是用面向对象语言实现的一种方法。

要实现多态性。

您现在可以拥有对基类对象的引用集合,并将对派生类对象的引用放在那里,在不知道实际派生类的情况下,通过任何引用调用虚函数,并且每次调用的派生重写函数最多。这就是所谓的多态性。

需要的是派生类可以重写,并且它的行为符合您的预期

反之,在派生类上创建方法时,指定new关键字——在这种情况下,使用与变量类型匹配的函数版本,因此:

derived foo = new derived();
base foo2 = foo;

foo2.bar(); // If bar() is virtual, and overriden in derived, it will use that implementation.
foo.bar(); // if bar() is not virtual, this may be calling a completely different function, if derived defines a new version