从本质上讲,我试图廉价地引用一个基础对象,以便以后可以完全构建它,并且可以很容易地被不直接参与该对象构建过程的任何东西引用。但是,当我有一个在构建过程中有意义的对象时(它实际上是一个工厂,它创建了其他使用 a 的对象,这些对象依赖于“a”,并且在 switch 案例中构建这些对象是有意义的。)
我考虑过使用指针,但我认为它们不合适。
using System;
namespace ConsoleApplication5
{
class ClassA
{
public virtual void hello()
{
Console.WriteLine("Hello World!");
}
}
class ClassB : ClassA
{
public override void hello()
{
Console.WriteLine("Goodbye World!");
}
}
class ClassC
{
ClassA m_object;
public ClassC(ClassA a)
{
m_object = a;
}
public void run()
{
m_object.hello();
Console.WriteLine(m_object.GetType().ToString());
}
}
class Program
{
static void Main(string[] args)
{
ClassA a;
ClassC c = new ClassC(a);
//switch(something)
//{
//case "somethingElse":
a = new ClassB();
c.run();
//...
//break;
//...
//}
//CompleteAGenericCollationTaskWith(a);
}
}
}
基本上:
我正在尝试:在创建对象之前将对象的共享引用传递给对象,以便我可以(最好)从第二个对象内部对其进行只读访问。
我怀疑它与a = new ClassB();
覆盖引用有关,但我只有大约 60% 的把握是这种情况,并且不知道如何在不使用指针的情况下保留它。
问题:
我该如何进行这项工作?我需要改变我的结构吗(可能)?我可以在保持ClassA
和ClassB
最小更改的ClassC
同时做到这一点Program
吗?