c# - 在类之间传递参数 - 使用公共(public)属性或将属性类作为参数传递?

标签 c# java design-patterns oop properties

让我们假设我有一个名为 ABC 的类,它将包含一个 Point 对象列表。

我需要用它们做一些绘图逻辑。这些 Point 对象中的每一个都将具有一个 Draw() 方法,该方法将由 ABC 类调用。

Draw() 方法代码需要来自 ABC 类的信息。

我只能看到两种让他们获得此信息的方法:

  1. 让 Abc 类公开一些允许 draw() 做出决定的属性。
  2. 让 Abc 类传递给 draw() 一个充满属性的类。

两种情况下的属性都是相同的,我的问题是在这种情况下首选什么。也许第二种方法更灵活?也许不会?我在这里看不到明显的赢家,但这肯定与我缺乏经验有关,而不是其他任何事情。

如果还有其他好的方法,欢迎分享。

两种情况:

class Abc1 {
    public property a;
    public property b;
    public property c;
    ...
    public property z;

    public void method1();
    ...
    public void methodn();
}

这是方法 2:

class Abc2 {
    //here we make take down all properties

    public void method1();
    ...
    public void methodn();
}

class Abc2MethodArgs {
    //and we put them here. this class will be passed as argument to
    //Point's draw() method!
    public property a;
    public property b;
    public property c;
    ...
    public property z;
}

此外,如果这两种方法有任何“正式”名称,我想知道它们以便我可以更好地选择标签/线程名称,这样它对于搜索目的更有用。或者随意编辑它们。

最佳答案

最佳方法取决于 ABC 需要提供给 Point 实例的信息的性质、这些类之间关系的性质以及它们的“预期” future 。换句话说,有很多定性因素。

如果您确实要向 Point 传递一个 ABC 实例,不要 - 而是为 Point 从 ABC 需要的任何东西制定一个适当的抽象,并将其封装在一个接口(interface)中。在静态方面,这类似于简单地创建一个新类来封装信息,但在动态方面却大不相同。

您不应该简单地传递 ABC 实例的原因是它会创建循环依赖。无需赘述,这通常应被视为非常糟糕的事情,除非绝对必要,否则应该避免。

并且,在更抽象的层面上,如果您确定这种明显的循环依赖的原因并将其排除在外——即创建一个接口(interface)来表示这个“点的数据源”,那么它会更有意义并在以后启用逻辑更改ABC 必须扮演的角色。此角色不同于“积分容器”角色,应在您的设计中反射(reflect)出来。

您还可以将参数传递给 draw() 方法 - 同样,这可能是好是坏取决于一系列因素。这当然不是一件非常糟糕的事情,只要您考虑过其影响。

关于c# - 在类之间传递参数 - 使用公共(public)属性或将属性类作为参数传递?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2593338/

相关文章:

java - 关于自动推送通知

language-agnostic - 何时使用模板方法 Vs。战略?

c++ - 如何在 C++ 中模拟递归类型定义?

c# - 无法隐式转换“System.TimeSpan?”具有.HasValue条件的“System.TimeSpan”

java - 这是对 try/finally 的滥用吗?

c# - 在 C# 中访问 WindowsInstaller.Installer COM 对象

java - 使用反射在 jaxb 对象上设置 ArrayList 值时出现问题

java - 避免在不同上下文中多次实现同一方法

c# - 正则表达式匹配不匹配的内容

c# - 如何使用 EF 代码优先 POCO 创建 View