c#抽象方法:内部公开和虚拟?

问题描述 投票:8回答:5

c#中抽象方法是内部公开和虚拟的吗?

所有的方法,默认情况下都是私有的,如果一个抽象方法是私有的,那么它将不能被派生类使用,会产生错误 "virtual or abstract members cannot be private"

c# abstract-class private public access-modifiers
5个回答
13
投票

我觉得你问的问题和大多数人想的不一样(换句话说,你好像明白了什么是"..."。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 就像如果方法不是抽象的一样。


5
投票

抽象只是一种说法 "我在这里,但还没有人告诉我我要做什么" "I am here, but no one has told me what I'm going to do yet." 既然还没有人实现那个成员,就必须有人去做。要做到这一点,你必须继承那个类,并覆盖那个成员。

为了能够覆盖某些东西,它必须被声明为... abstractvirtual继承人必须至少可以访问,即必须标明 protected, internalpublic.


2
投票

抽象方法不能是私有的,是虚拟的。 它们至少必须受到保护。


2
投票

根据Jon Skeet在这里的论证(C#中的默认访问修饰符是什么?)

在C#中,所有东西的默认访问权限都是 "你能为该成员声明的最限制的访问权限"

必须 "保护 "好

正如Pieter所指出的,默认值总是私有的,所以。

abstract class Foo
{
    abstract void Bar(); 
} 

会给编译器带来错误

虚拟或抽象成员不能是私有的

© www.soinside.com 2019 - 2024. All rights reserved.