4

私はデザインパターンを学んでいて、クラスからのそのようなメソッド呼び出しを見ました:

class Client: SubjectAccessor {
    static void Main() {
        Console.WriteLine("Proxy Pattern\n");

        ISubject subject = new Proxy();
        Console.WriteLine(subject.Requesy());

        subject = new(); //Here is what I am asking
        COnsole.WriteLine(subject.Request());
    }
}

ご覧のとおり、そこにsubject = new();呼び出しがあり、新しいインスタンスを作成しているのか、Proxyそれとも何か他のものを作成しているのか疑問に思っています。これに関連するものは見つかりませんでした。

あなたの助けに感謝します。

必要に応じて、コード全体を貼り付けるか、実際には本に書かれているので、ここに書き留める必要があります。

ありがとう。

4

5 に答える 5

11

本の誤植です。それが有効な C# の現在のバージョンはありません ("Type expected" コンパイラ エラーが発生するはずです)。コンテキストがなければ、それがどうあるべきかを知ることは不可能です。

于 2010-11-30T07:58:59.547 に答える
4

私はその本の技術編集者でした。今目の前にコピーがあります。私のコピーは言う:

class Client : SubjectAccessor { 
  static void Main() {
    Console.WriteLine("Proxy Pattern\n");

    ISubject subject = new Proxy();
    Console.WriteLine(subject.Request());
    Console.WriteLine(subject.Request());

    ProtectionProxy subject = new ProtectionProxy();
    Console.WriteLine(subject.Request());

さて、ここにエラーがあります。変数「subject」が 2 回宣言されています。どうやら、本をレビューしたときにエラーをキャッチできなかったようです。(ここで行う正しいことは、「subject」の 2 番目の宣言から型を削除することです)。

ただし、それは報告しているエラーではありません。

それはあなたのコピーが言っていることではありませんか?私は 2007 年 12 月の初版を持っています。あなたは何版を持っていますか?おそらく、誰かが後の版でこのエラーを修正しようとして、台無しにしたのでしょうか? 私の推測では、最初の行を削除するのではなく、誤った行から ProtectionProxy タイプの両方の言及を削除することによって、誰かがエラーを修正しようとしたのでしょう。

于 2010-11-30T16:35:13.093 に答える
4

私の知る限り、それは間違っています。そのコードはコンパイルさえしません。

C# の新しいキーワードには、次のリンクで説明されている 3 つの意味しかありません:
http://msdn.microsoft.com/en-us/library/51y09td4%28v=VS.80%29.aspx

于 2010-11-30T08:01:13.210 に答える
2

それがプロキシクラスになります。そのような構文はこれまで見たことがありません。可読性が低下するだけなので、そのようなものは使用しないことをお勧めします..

于 2010-11-30T08:00:09.313 に答える
2

それがどのようにコンパイルされるかわかりません。このコンテキストの「new」は new 演算子であり、これは常に C# 構文ごとの型名を想定しています。

于 2010-11-30T08:00:55.377 に答える