与unic参数具有相同属性的对象?

时间:2017-09-25 13:21:27

标签: c# oop

我有两个具有相同属性的对象:

ObservableCollection<A> FooA
ObservableCollection<B> FooB

模型AB都有共同属性。我已创建此方法来更新属性而不创建冗余代码:

public static void UpdateItemInCollection(A person, ObservableCollection<A> collection)
    {
        foreach (var m in collection)
        {
            m.Name = m.id == person.id;
        }
    }

但我只能传递参数FooA。我怎么能通过FooB?

2 个答案:

答案 0 :(得分:0)

如果该属性实际上代表两个类中的相同类型的数据,则必须使用接口或父(最可能是抽象)类。

public interface INamed
{
    string Name { get; }
}

public Person : INamed
{
    public string Name {get; set;}
    // etc.
}

public People : INamed
{
    public string Name {get; set;}
    // etc.
}

public static void UpdateItemInCollection(INamed person, ObservableCollection<INamed> collection)
{
    foreach (var m in collection)
    {
        m.Name = m.id == person.id;
    }
}

答案 1 :(得分:0)

您可以为这两个类创建一个界面:

public interface AandB
{
    string Name { get; set; }
}

然后在类中实现它:

public interface AandB
{
    string Name { get; set; }
}
public class A : AandB
{

    public string Name { get; set; }
    public string id { get; set; }

}

class B : AandB
{
    public string Name { get; set; }
    public string id { get; set; }

}

修改您的方法以获取界面而不是类:

public static void UpdateItemInCollection(AandB person, ObservableCollection<AandB> collection)
{
    foreach (var m in collection)
    {
        m.Name = "whatever";
    }    
}

集合必须是接口类型:

ObservableCollection<AandB> FooA;
ObservableCollection<AandB> FooB;

最后,您可以使用这两个类调用该方法:

FooA = new ObservableCollection<AandB>();
A objA = new A();
objA.id = "1";
objA.Name = "test";
FooA.Add(objA);
FooB = new ObservableCollection<AandB>();
B objB = new B();
objB.id = "1";
objB.Name = "test";
FooB.Add(objB);
UpdateItemInCollection(objA, FooA);
UpdateItemInCollection(objB, FooB);