【问题标题】:What is new() function here?这里的 new() 函数是什么?
【发布时间】:2011-05-17 17:32:02
【问题描述】:

我一直在学习设计模式,我在一个类中看到了这样的方法调用:

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 的新实例或其他东西。我没有找到与此相关的任何内容。

非常感谢您的帮助。

如果您需要,我可以粘贴整个代码,或者实际上它是写在一本书上的,所以我需要在这里写下来。

谢谢。

【问题讨论】:

标签: c# design-patterns proxy-pattern


【解决方案1】:

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

【讨论】:

  • 那么,它应该是什么? subject= new Proxy(); ?
  • @Braveyard - 没有上下文我无法判断;例如,显示一个 decorator 可能是有意义的,在这种情况下,它可能类似于 new SomethingOtherType(subject)
【解决方案2】:

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

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

【讨论】:

  • 真的很喜欢链接的上下文。谢谢你。
【解决方案3】:

我是那本书的技术编辑;我现在有一份副本在我面前。我的副本说:

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 月的第一版;你有什么版本?也许有人试图在以后的版本中纠正这个错误并把它搞砸了?我的猜测是有人试图通过从错误行中删除 both 提到的 ProtectionProxy 类型而不是删除 第一个 来纠正错误。

【讨论】:

  • 您好,感谢您的回复。我有 2007 年 12 月版。
【解决方案4】:

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

【讨论】:

  • 最后,绝对同意你的看法。
【解决方案5】:

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

【讨论】:

  • 这也是我所知道的。反正应该是错字。
猜你喜欢
  • 2019-03-26
  • 1970-01-01
  • 2011-08-26
  • 1970-01-01
  • 2012-01-08
  • 1970-01-01
  • 2010-09-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多