如何在c#中的两个类之间进行通信?

时间:2016-04-26 05:11:15

标签: c#

我有两个班级AB。类A具有类B的实例。类A有一个类Foo列表,其中属性IdName是动态的。在调用类Run的{​​{1}}方法时,会计算类B中的局部变量id。假设B的值为2,我需要搜索id并返回“两个”。

  

事件可以更新dynamicList

dynamicList
  

我有两个班级class Foo() { public Foo(int id, string name) { this.Id = id; this.Name = name; } public int Id { get; set; } public string Name { get; set; } } class A { public A() { this.dynamicList.Add(new Foo(1, "One")); this.dynamicList.Add(new Foo(2, "Two")); this.dynamicList.Add(new Foo(3, "Three")); b = B(); b.Run(); } public List<Foo> dynamicList = new List<Foo>(); } class B { public void Run() { while(true) { int id; string name; // an event appended this.dynamicList.Add(new Foo(4, "Four")); // an event appended this.dynamicList.Add(new Foo(5, "Five")); // some code goes here that gets the value of id 4 id = 4; // I need to convert the value of '4' to 'Four' } } } A。类B具有类的实例   A。类B有一个类A的列表,其中包含属性Foo和   Id这是动态的。当调用类Name的{​​{1}}方法时,   计算类Run中的局部变量B。假设价值   id为{2},我需要搜索B并返回“两个”。

id

5 个答案:

答案 0 :(得分:0)

您可以使用值创建辅助类并从中获取值。

public static class ValueHelper
{
    public static string GetValue(int i)
    {
        ...
    }
}

B

strint value = ValueHelper.GetValue(2);

答案 1 :(得分:0)

有多种方法可以实现这一点。

1是通过参数。

b.Run(dynamicList);

然后在方法运行上运行搜索。

public void Run()
{
    while(true)
    {
        int id;
        string name;
        // some code goes here that gets the value of id 2
        id = 2;
        var item = dynamicList.FirstOrDefault(x => x.Id == id);
        // reference System.Linq
    }
}

第二个是提供参数的委托。

b.Run(id => dynamicList.FirstOrDefault(x => x.Id == id))

在运行

上制作这样的代码
public void Run(Func<int, Foo> getItem)
{
    while(true)
    {
        int id;
        string name;
        // some code goes here that gets the value of id 2
        id = 2;
        var item = getItem(id);
        // reference System.Linq
    }
}

还有很多其他方法可以做到这一点,这些只是如何通过对代码进行最少修改来完成的示例,您还可以考虑进行设计更改以进一步改进流程。

答案 2 :(得分:0)

只需将B.Run的签名更改为:

public void Run(A a)

然后您可以使用方法调用轻松传递列表:

b.Run(this)

可以使用

访问该列表
a.dynamicList

答案 3 :(得分:0)

您必须将 dynamicList 的参数设为B类

public class Foo()
{
    public Foo(int id, string name)
    {
        this.Id = id;
        this.Name = name;
    }
    public int Id { get; set; }
    public string Name { get; set; }
}

public class A
{
    B b = null;
    public A()
    {
        this.dynamicList.Add(new Foo(1, "One"));
        this.dynamicList.Add(new Foo(2, "Two"));
        this.dynamicList.Add(new Foo(3, "Three"));

        b =new B();
        b.Run(dynamicList);
    }
    public List<Foo> dynamicList = new List<Foo>();
}

public class B 
{

    public void Run(List<Foo> DynamicList)
    {
        Foo foo = null;
        while(true)
        {
            foo = DynamicList[0];
            int id = foo.Id;
            string name = foo.Name;

            //here you can add your logic..
            // it may be foreach loop or something else..
            //and iterate all List in DynamicList

            // some code goes here that gets the value of id 2
            id = 2;

            // I need to convert the value of '2' to 'Two'

        }
    }
}

答案 4 :(得分:0)

Add the parameter List<Foo> dynamicList in Run method and pass the List from the caller class constructor A().
class Foo()
{
    public Foo(int id, string name)
    {
        this.Id = id;
        this.Name = name;
    }
    public int Id { get; set; }
    public string Name { get; set; }
}

class A
{
    public A()
    {
        this.dynamicList.Add(new Foo(1, "One"));
        this.dynamicList.Add(new Foo(2, "Two"));
        this.dynamicList.Add(new Foo(3, "Three"));

        b = B();
        b.Run(dynamicList);
    }
    public List<Foo> dynamicList = new List<Foo>();
}

class B 
{
            public void Run(List<Foo> dynamicList)
    {
        while(true)
        {
            int id;
            string name;

            var data= dynamicList.FirstOrDefault(x=>x.Id==2);
            id=data.Id;
            //id = 2;
            var two=  dynamicList.FirstOrDefault(x=>x.Id==2).Select(x=>x.Name);
            // I need to convert the value of '2' to 'Two'

        }
    }
}

希望这是你所期待的。