如何从 TestObject
中执行 Print
?
class Program
{
private int Value;
static void Main()
{
TestObject test = new TestObject();
Program p1 = new Program();
Program p2 = new Program();
p1.Value = 1;
p2.Value = 2;
p1.Print();
p2.Print();
}
private void Print()
{
Console.Write(Value.ToString());
Console.ReadKey();
}
}
class TestObject
{
// How to execute p1.Print here?
}
有多种方法:
直接通过程序
专利:
- 简单的更改
cons:
- 您将必须公开
Print
- 您将在程序中公开其他事物
- 您将
TestObject
耦合到Program
直接
以下是示例代码:
class Program
{
static void Main()
{
TestObject test = new TestObject(this);
}
public void Print()
{
Console.Write(Value.ToString());
Console.ReadKey();
}
}
class TestObject
{
public TestObject(Program p)
{
p.Print();
}
}
将委托给testObject
专利:
- 简单的更改
- 不必公开
Print
- 仅将1方法公开到
TestObject
cons:
- 耦合是
TestObject
想要做某事,而不是TestObject
想要访问做某事的事物
以下是示例代码:
class Program
{
static void Main()
{
TestObject test = new TestObject(() => Print());
}
private void Print()
{
Console.Write(Value.ToString());
Console.ReadKey();
}
}
class TestObject
{
public TestObject(Action print)
{
print();
}
}
在程序中实现接口并将其传递给testObject
专利:
- 仅公开接口公开的内容
- 更容易实现其他地方(最好说"需要此接口",而不是"需要代表",更清晰的合同规范)
- 无耦合到特定类型,耦合是符合某些条件的任何对象 - 实现接口
cons:
- 无相关的(我认为)
以下是示例代码:
interface IPrintable
{
void Print();
}
class Program : IPrintable
{
static void Main()
{
TestObject test = new TestObject(this);
}
public void Print()
{
Console.Write(Value.ToString());
Console.ReadKey();
}
}
class TestObject
{
public TestObject(IPrintable p)
{
p.Print();
}
}
结论:我的建议是选择接口方式。更清晰的设计,易于扩展而不将多个代表传递到周围。