c#中抽象方法是内部公开和虚拟的吗?
所有的方法,默认情况下都是私有的,如果一个抽象方法是私有的,那么它将不能被派生类使用,会产生错误 "virtual or abstract members cannot be private"
我觉得你问的问题和大多数人想的不一样(换句话说,你好像明白了什么是"..."。abstract
是指)。)
你不能声明一个私有的抽象方法--编译器会发出一个错误。 这两个类都不会被编译。
class Foo
{
private abstract void Bar();
}
class Baz
{
// This one is implicitly private - just like any other
// method declared without an access modifier
abstract void Bah();
}
编译器阻止你声明一个无用的方法,因为私有抽象成员不能在派生类中使用,而且对声明类没有实现(因此没有用处)。
需要注意的是,编译器应用于抽象成员的默认访问修饰符(如果你没有自己指定的话)仍然是 private
就像如果方法不是抽象的一样。
抽象只是一种说法 "我在这里,但还没有人告诉我我要做什么" "I am here, but no one has told me what I'm going to do yet." 既然还没有人实现那个成员,就必须有人去做。要做到这一点,你必须继承那个类,并覆盖那个成员。
为了能够覆盖某些东西,它必须被声明为... abstract
或 virtual
继承人必须至少可以访问,即必须标明 protected
, internal
或 public
.
抽象方法不能是私有的,是虚拟的。 它们至少必须受到保护。
根据Jon Skeet在这里的论证(C#中的默认访问修饰符是什么?)
在C#中,所有东西的默认访问权限都是 "你能为该成员声明的最限制的访问权限"
必须 "保护 "好
正如Pieter所指出的,默认值总是私有的,所以。
abstract class Foo
{
abstract void Bar();
}
会给编译器带来错误
虚拟或抽象成员不能是私有的