Có, abstract methods are virtual theo định nghĩa; chúng phải được ghi đè để thực sự bị ghi đè bởi các lớp con:
Khi một tuyên bố phương pháp thể hiện bao gồm một phương pháp trừu tượng. Mặc dù một phương pháp trừu tượng cũng là một phương pháp ảo, nhưng không thể sửa đổi được virtual
.
Ngược lại bạn không thể khai báo phương pháp trừu tượng không ảo, vì nếu bạn có thể, bạn sẽ có phương pháp không thể triển khai và do đó không bao giờ được gọi, làm cho nó trở nên vô dụng.
Tuy nhiên, nếu bạn muốn có một lớp học thực hiện một phương pháp trừu tượng nhưng không cho phép bất kỳ lớp con của nó để thay đổi thực hiện, đó là nơi sealed
do thỏa thuận hợp Ví dụ:.
abstract public class AbstractClass
{
abstract public void DoSomething();
}
public class BaseClass : AbstractClass
{
public sealed override void DoSomething()
{
Console.WriteLine("Did something");
}
}
Chú ý rằng trong khi trừu tượng phương pháp là (ngầm) ảo, việc thực hiện trong lớp cơ sở cụ thể là không ảo (vì từ khóa sealed
).
bản sao có thể có của [Có phải mọi hàm trừu tượng ảo trong C#, nói chung không?] (Http://stackoverflow.com/questions/391557/is-every-abstract-function-virtual-in-c-in-general) –