2017-09-25 81 views
1

我有兩個對象,像這樣相同的屬性:具有與單一參數相同屬性的對象?

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

做一個接口,這兩個類A''和'B' – Pikoh

+0

而且順便說一句, 'm.Name = m.id == person.id;'只在'Name'是一個布爾屬性時才起作用 – Pikoh

回答

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; 
    } 
} 
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"; 
    }  
} 

T他收藏必須是接口類型:

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); 
相關問題