1

なぜこれがコンパイルされるのですか?

public abstract class Thing
{
    public abstract void ActualWork()
    {
        Console.WriteLine("this should be impossible to execute");
    }
}

abstract必要に応じて後で実装されるため、メソッドは実装を禁止するべきではありませんか?

CodeCamper のコメントによると、Visual Studio はそれをエラーとしてマークしませんでした。それ自体はロックアップしなかったので、私には奇妙ですが、それ以外のエラーにまだ気づきました。

4

2 に答える 2

7

Visual Studio IDE は、プログラムを実行しようとするなどして更新されるまで、単にエラーを登録できない場合があります。完璧な例として、以下のコードを使用して、両方の "public" の後に Abstract という単語を手動で追加すると、すぐにエラーとして登録されません。これは、Visual Studio の単なる不具合です。

public class Thing
    {
        public void ActualWork()
        {
            Console.WriteLine("this should be impossible to execute");
        }
    }

プログラムを実行するとエラーは表示されませんが、次のエラーが表示されます。

エラー 1 ... 抽象とマークされているため、本体を宣言できません

なぜこれがコンパイルされるのですか?そうではありません。Visual Studio やおそらく他の多くの IDE では、エラーの入力方法によっては、その場でエラーを登録するのに問題があります。

MSDN ( http://msdn.microsoft.com/en-us/library/sf985hc5(v=vs.71).aspx )

抽象メソッド宣言は実際の実装を提供しないため、メソッド本体はありません。メソッド宣言は単にセミコロンで終了し、署名の後に中括弧 ({ }) はありません。

于 2013-06-05T01:34:14.110 に答える
3

これはコンパイルされません:

エラー:「abstract とマークされているため、body を宣言できません」

于 2013-06-05T01:30:44.640 に答える