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# 版本(它应该引发“预期类型”编译器错误)。没有上下文就不可能知道它应该是什么。

于 2010-11-30T07:58:59.547 回答
4

AFAIK 这是错误的,该代码甚至无法编译。

C# 中的 new 关键字只能具有此链接中描述的 3 种含义:http:
//msdn.microsoft.com/en-us/library/51y09td4%28v=VS.80%29.aspx

于 2010-11-30T08:01:13.210 回答
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 年 12 月的第一版;你有什么版本?也许有人试图在以后的版本中纠正这个错误并把它搞砸了?我的猜测是有人试图通过从错误行中删除 ProtectionProxy 类型的两个提及而不是删除一个来纠正错误。

于 2010-11-30T16:35:13.093 回答
2

那将是代理类。之前从未见过这样的语法。最好不要使用这样的东西,因为它只会降低可读性..

于 2010-11-30T08:00:09.313 回答
2

我看不出它是如何编译的。在这种情况下,“new”是 new 运算符,并且它总是需要每个 C# 语法的类型名。

于 2010-11-30T08:00:55.377 回答