Что такое функция new () здесь? - PullRequest
4 голосов
/ 30 ноября 2010

Я изучал шаблоны проектирования и видел такой вызов метода из класса:

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 или что-то еще. Я не нашел ничего связанного с этим.

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

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

Спасибо.

Ответы [ 5 ]

11 голосов
/ 30 ноября 2010

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

4 голосов
/ 30 ноября 2010

Я был техническим редактором этой книги; У меня есть копия прямо передо мной сейчас. Моя копия гласит:

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 из ошибочной строки вместо удаления first one.

4 голосов
/ 30 ноября 2010

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

Новое ключевое слово в C # может иметь только 3 значения, описанных в этой ссылке:
http://msdn.microsoft.com/en-us/library/51y09td4%28v=VS.80%29.aspx

2 голосов
/ 30 ноября 2010

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

2 голосов
/ 30 ноября 2010

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

...