如何沟通两个班?

时间:2011-12-09 14:03:02

标签: c# .net design-patterns

我想让两个班级互相沟通。我想使用字典来添加项目。我简化了我的模式以轻松解决它。如何使用字典添加新项目。

我想只生成MyClass的一个实例。这很重要。这是一种诡计......

public interface IHost
{

}

public class MyClass:IHost
{
   public Dictionary<int,string>; dic { get; set;}

   public MyClass()
   {
       dic =  new Dictionary<int,string>();
   }
}

public class  MyClass2 : IHost
{
    public MyClass()
    {

    }

    public void Save()
    {
      dic.Add(1,"vxcvcx");
    }
}

我得到的错误:

  

当前上下文中不存在名称“dic”

5 个答案:

答案 0 :(得分:2)

只需将MyClass作为构造函数变量传递给class2:

public class MyClass:IHost
{
   public Dictionary<int,string> dic { get; set;}

   public MyClass()
   {
       dic =  new Dictionary<int,string>();
   }

   public void Add(int key, string value)
   {
       dic.Add(key, value);
   }
}

public class  MyClass2 : IHost
{
    MyClass1 _class1;

    public MyClass2(MyClass1 instance)
    {
        _class1 = instance;
    }

    public void Save()
    {
      _class1.Add(1,"vxcvcx");
    }
}

答案 1 :(得分:1)

或者:

  1. MyClass2需要对MyClass1实例的引用,然后才能调用someMyClass1.dic.Add()
  2. MyClass2需要对MyClass1实例中的字典的引用,因为对dic.Add()的调用将起作用,因为它将dic设置为MyClass1的{{1}的值}。
  3. MyClass2需要派生自MyClass1,然后它是一种更专业的MyClass1类型,可以访问所有公共受保护成员和受保护成员,就像它们被定义一样。

答案 2 :(得分:1)

使用基类而不是接口:

abstract class MyBaseClass
{
    public Dictionary<int,string> dic { get; set; }

    public MyBaseClass()
    {
        dic = new Dictionary<int, string>(5);
    }

    public void Add(int key, string value)
    {
        dic.Add(key, value);
    }
}

public class MyClass1 : MyBaseClass
{
    public MyClass1():base()
    {          
    }        
}

public class MyClass2 : MyBaseClass
{
    public MyClass2():base()
    {

    }

    public void Save()
    {
        Add(1, "somevalue");
    }
}

答案 3 :(得分:0)

创建MyClass1单例并从MyClass 2访问dic变量...我是否正确理解了场景?

答案 4 :(得分:0)

我将解决这个明显的问题。

public Dictionary<int,string>; dic { get; set;} 

应该是

public Dictionary<int,string> dic;

以下代码不起作用,您必须在MyClass2中定义 Dictionary 变量,以使此代码有效。

public class  MyClass2 : IHost   {       public MyClass()       {          }          public void Save()       {         dic.Add(1,"vxcvcx");       }   }   

如果作者更新了问题,并实际解释了他们想要实现的目标,我将更新我的答案。

我应该添加... MyClass 类不是必需的,字典应该在 MyClass2

中创建