Object 在不创建新实例的情况下执行对象方法
如何从Object 在不创建新实例的情况下执行对象方法,object,methods,instance,Object,Methods,Instance,如何从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;
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?
}
有多种方法可以做到这一点: 将程序直接传递给TestObject 优点:
- 简单的改变
- 您必须将
公开打印
- 您将在程序中公开其他内容
- 您将
直接耦合到TestObject
程序
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();
}
}
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();
}
}
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();
}
}
将委托传递给TestObject
优点:
- 简单的改变
- 不必将
公开打印
- 仅向
TestObject
- 耦合是
想要做某事,而不是TestObject
想要访问做某事的东西TestObject
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();
}
}
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();
}
}
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();
}
}
在程序中实现接口并将其传递给TestObject
优点:
- 仅公开接口公开的内容
- 更容易在其他地方实现(最好说“需要这个接口”而不是“需要一个代表”,更清晰的合同规范)
- 不耦合到特定类型,耦合到满足特定条件的任何对象-实现接口
- 不相关(在我看来)
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();
}
}
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();
}
}
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();
}
}
结论:我的建议是选择接口方式。更清晰的设计,更易于扩展,无需传递多个委托。使
打印静态或创建实例,这是您的选择。编辑问题,使其与调用方法的对象相关。没有办法做到这一点吗?没有实例就不能调用实例方法。不管它是哪一个对象、类型或方法,您都不能这样做。但是,您可以将Program
的实例传递给TestObject
,这样它将有一个实例来调用该方法。向TestObject
添加一个构造函数,该构造函数接受Program
的实例,然后使Print
公开。或者您可以传入一个委托,向TestObject
添加一个构造函数,该构造函数接受Action
委托的实例,并使用newtestobject(()=>Print())构造它
然后从TestObject
中调用代理。您能提供一个示例吗?您可以根据需要随意更改TestObject