这里的new()函数是什么?

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
1
C# 3.0 设计模式 - Judith Bishop 第27页 - Tarik
3
根据说明,它是一种类型。参考http://social.msdn.microsoft.com/Forums/en-US/Vsexpressvcs/thread/6da66b58-2f52-4023-a874-c3e5a4bbca05,应该将其改为subject = new ProtectionProxy()。 - Waleed Al-Balooshi
5个回答

11

这是书中的错别字。在当前的C#版本中,它是无效的(应该引发“类型预期”编译器错误)。没有上下文,不可能知道它应该是什么。


那么,它应该是什么呢?subject = new Proxy(); - Tarik
1
@Braveyard - 没有上下文我无法确定其含义;例如它可能意味着展示一个装饰器,在这种情况下,它可能是类似于new SomethingOtherType(subject)的东西。 - Marc Gravell

4

非常喜欢链接的内容。谢谢你。 - Tarik

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”被声明了两次。显然,我在审查这本书时没有发现错误。(在这里正确的做法是从第二个“subject”的声明中删除类型)。但是,这不是您报告的错误。
您确定您的副本没有这个错误吗?我拥有2007年12月的第一版,您拥有哪个版本?也许有人试图在以后的版本中纠正这个错误,并搞砸了?我猜想,有人尝试通过从错误行中删除ProtectionProxy类型的两个提到来纠正该错误,而不是删除第一个。

你好,感谢回复。我有2007年12月的版本。 - Tarik

2

那就是代理类。虽然我从未见过这种语法,但最好不要使用这样的东西,因为它只会降低可读性。


在最后这个词上,我完全同意你的观点。 - Tarik

2

我看不出它是如何编译的。在这个上下文中,“new”是新操作符,根据C#语法,它总是需要一个类型名称。


那也是我知道的。无论如何,这应该是个打字错误。 - Tarik

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接