代码之家  ›  专栏  ›  技术社区  ›  Adam Lear

把“这个”当作论点是不好的做法吗?

c#
  •  26
  • Adam Lear  · 技术社区  · 16 年前

    我现在很想写以下内容:

    public class Class1() 
    {
        public Class1() 
        {
            MyProperty = new Class2(this);
        }
    
        public Class2 MyProperty { get; private set; }
    }
    
    public class Class2() 
    {
        public Class2(Class1 class1) 
        {
            ParentClass1 = class1;
        }
    
        public Class1 ParentClass1 { get; set; }
    }
    

    将“this”作为参数传递是设计问题的标志吗?什么是更好的方法?

    8 回复  |  直到 16 年前
        1
  •  39
  •   Adam Robinson    16 年前

    不,通过没有基本的设计问题 this . 显然,这可能会被误用(例如,当调用实例本身的值时,通过让相关类依赖于实例中存储的值来创建过于紧密的耦合),但这并没有一般的问题。

        2
  •  21
  •   pm100    16 年前

    不,这不是问题。这就是“this”关键字存在的原因,它允许您传递自己

        3
  •  8
  •   Joe    16 年前

    这样做有充分的理由,但这取决于实际的类。

        4
  •  8
  •   Dan Bryant    16 年前

        5
  •  7
  •   Dan Tao    16 年前

    只是想让你放松一点:

    经过 this List<T>.Enumerator 类型保存对其父级的引用 List<T> 对象,以了解是否在枚举之间修改了列表(以及何时抛出 InvalidOperationException ).

    当您有两个(或更多)类型实际上属于一个紧密结合的逻辑相关组(如前面提到的集合和枚举器)时,这是相当标准的。我见过很多这样的例子,开发人员为了避免这种完全合理的耦合,不惜一切代价。

        6
  •  3
  •   mrjoltcola    16 年前

    如果 在你的设计中显然需要一种关系。此模式通常用于各种应用程序中,以指示“父级”或“所有者”。

    我特别在编译器实现或GUI工具箱中遍历树时使用过它。

        7
  •  3
  •   flq    16 年前

    举个例子,看看访问者模式:

    interface IVisitor {
     Visit(SomeClass c);
     Visit(AnotherClass c);
    }
    
    interface IAcceptVisitor {
      void Accept(IVisitor v);
    }
    
    public SomeClass : IAcceptVisitor {
      void Accept(IVisitor v) {
        v.Visit(this);
      }
    }
    
        8
  •  3
  •   sibidiba    16 年前

    我根本不知道C语言中的内存模型。但是路过 在许多语言(包括Java)中,从构造函数到另一个对象本身就是不安全的。

    此时,它将引用处于未定义状态的对象。