我有两个在运行时实例化并加载的类。我想检查一个资源,而不必引用实例,因为如果有很多检查和类,它可能会变得混乱。
例如,如果我有以下两个类,我想从另一个中调用一个。
Class Item
{
private int id;
private int loc;
void Item()
{
// the Class actually has some properties with get set, but thats not the point here.
id = 1;
loc = 2;
}
public bool check()
{
// Check if the several fields are ok for DB submission
// how Can I refer to the other class from here? Do I have to pass the instance as a parameter?
return Locals.Exists(loc); // does not work because its not static!
}
}
Class Locals
{
Hashtable l = new Hastable();
void Locals()
{
// This will actually be loaded from a DB at runtime.
l.add(1, "Local 1");
l.add(2, "Local 2");
}
public bool Exists(int i)
{
return l.ContainsKey(i);
}
}
//Form Code:
main()
{
Item newItem = new Item();
Locals allLocals = new Locals();
newItem.check();
}
有没有办法在不必调用
的情况下执行此操作newItem.check(allLocals);
从我看到的情况来看,即使是代表,调用者classe也需要另一个类的实例。
简而言之,是否有其他方法可以促进跨实例通信?
我是否容易混淆?
答案 0 :(得分:0)
目前还不完全清楚你要在这里完成什么,但解决传递大量实例问题的一个选择是使用IoC框架(Ninject is one example,但有几个可供选择。)因为实例是在构造对象时动态注入的,所以这有助于减少不方便的胶水代码。还有其他模式可用于允许类找到彼此(Singleton实例或某种形式的Repository允许使用一些标识数据查找实例。)还可以使用消息传递设计,它强烈地解耦类,一些额外开销的成本。
这实际上取决于你想要做什么。每个设计都有其优点和缺点。
答案 1 :(得分:0)
我如何参考其他课程 从这里?我必须通过 instance作为参数?
是的,与实例通信的唯一方法是获取对它的引用(或中介)。由于Locals
不是静态类,因此将实例传递给Item
构造函数或方法参数。
答案 2 :(得分:0)
不确定我明白你的意思,但我通常会为类似情况添加一个包含所有对象的静态列表
Class Locals
{
public static List<Locals> MyLocals = new List<Locals>(); // first thing i add
Hashtable l = new Hastable();
void Locals()
{
// This will actually be loaded from a DB at runtime.
l.add(1, "Local 1");
l.add(2, "Local 2");
MyLocals.Add(this); // second thing i add
}
然后你可以从静态上下文中获取对象。
一定要编辑dispose函数,否则GC将无效。