跨类通信而不引用实例C#

时间:2010-07-07 16:39:18

标签: c# class

我有两个在运行时实例化并加载的类。我想检查一个资源,而不必引用实例,因为如果有很多检查和类,它可能会变得混乱。

例如,如果我有以下两个类,我想从另一个中调用一个。


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也需要另一个类的实例。

简而言之,是否有其他方法可以促进跨实例通信?

我是否容易混淆?

3 个答案:

答案 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将无效。