17

カスタム プリンシパルの作成に関するチュートリアルを読んでいたときに、次のコードに遭遇しました。

public class BaseController : Controller
{
    protected virtual new UserPrincipal User
    {
        get { return HttpContext.User as UserPrincipal; }
    }
}

「保護された仮想新規」はどのくらい正確に機能していますか?

「新しい」というキーワードは、私を最も混乱させるものです。

4

3 に答える 3

39

protectedこのクラスとそれから派生したクラス内でのみ表示されることを意味します。

virtual派生クラスでオーバーライドできることを意味します。

newは、ここで新しいオーバーライド階層を作成することを意味します。つまり、基本クラスで定義されたメソッドのオーバーライドを停止し、このメソッドに置き換えます。

詳細はこちら

于 2012-09-30T14:44:17.923 に答える
7

newメンバーの非表示に使用されます。

オーバーライドされたメソッドとは異なり、newメソッドは基本クラスへの参照によって呼び出されません。

ドキュメントを参照してください。

于 2012-09-30T14:43:58.283 に答える
5

あなたの重要な質問:「キーワードnewは私を最も混乱させるものです。」

簡単な答え: newoverrideは相互に排他的です。基本クラスから継承されたクラス メンバーを置き換えるためnewに使用されます。対照的に、メンバーの基本クラスの実装を拡張するために使用されます。override

新しい修飾子 (C# リファレンス) (Visual Studio 2013)から:

2 つの修飾子は相互に排他的な意味を持つため、同じメンバーでnewoverrideの両方を使用するとエラーになります。new修飾子は、同じ名前の 新しいメンバーを作成し、元のメンバーを非表示にします。オーバーライド修飾子は、継承されたメンバーの実装を拡張します。

于 2014-07-02T14:23:36.217 に答える