2010-11-30 2 views
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 или что-то другое. Я не нашел ничего связанного с этим.

Ваша помощь очень ценится.

Если вам нужно, я могу вставить весь код или на самом деле он написан на книге, поэтому мне нужно записать его здесь.

Спасибо.

+2

Где вы это видели? выглядит как опечатка – philfreo 2010-11-30 07:59:11

+1

C# 3.0 Design Patterns - Judith Bishop Page 27 – Tarik 2010-11-30 08:01:34

+3

Это тип, как указано. Следуя http://social.msdn.microsoft.com/Forums/en-US/Vsexpressvcs/thread/6da66b58-2f52-4023-a874-c3e5a4bbca05, это должно быть subject = new ProtectionProxy(); – 2010-11-30 08:04:45

ответ

11

Это опечатка в книге. Нет текущей версии C#, в которой она действительна (она должна вызывать ошибку компилятора «Тип ожидаемого»). Без контекста невозможно узнать, что это такое должно быть be.

+0

Тогда, что это было? `subject = new Proxy();`? – Tarik 2010-11-30 08:02:05

2

Это будет прокси-класс. никогда не видел такого синтаксиса перед тем. Лучше не использовать такие вещи, как это только уменьшит читаемость.

2

Я не вижу, как это компилируется. «new» в этом контексте является новым оператором, и это всегда ожидает typename для синтаксиса C#.

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»).

Однако, это не ошибка, о которой вы сообщаете.

Вы уверены, что это не то, что говорит ваша копия? У меня есть выпуск в декабре 2007 года; какое издание у вас есть? Возможно, кто-то попытался исправить эту ошибку в более позднем выпуске и испортил ее? Я предполагаю, что кто-то попытался исправить ошибку, удалив и упоминает тип ProtectionProxy из ошибочной строки, а не удаляет первый.