绕过C#的限制并传递子元素的集合

时间:2015-05-22 11:55:34

标签: c# windows-store-apps

在我的Windows应用商店应用中,我使用了c#5.0。我需要通过传递子类的集合来调用接收基类的方法:

    public class Foo // base class
    {
         public int fooVariable = 1;
         public void fooMethod(){....};  
    }
    public class Bar:Foo // child class

    public void DoSomething(Foo foo)
    public void DoSomething(List<Foo> foos)
    {
        foreach (var foo in foos)
        {
            Debug.WriteLine(foo.i);  //access to variable
            foo.fooMethod();         //access to method
            foo.i = 10;              //!!!i can change variable!!!
        }
    }

    private List<Bar> _list;
    public void Call()
    {
        DoSomething(new Bar());         // ok
        _list = new List<Bar>();
        list.Add(new Bar());            // I can add a lot of items.
        DoSomething(list);              // not ok

        foreach (var foo in foos)
        {
            Debug.WriteLine(foo.i);  // in console I need to see '10'
        }
    }

是否有可能规避这种限制?如果是 - 怎么样?

UPD

DoSomething我需要对所有公共方法/变量(读/写)/属性(读/写)的完全访问权限

1 个答案:

答案 0 :(得分:2)

看起来DoSomething(List<Foo> foos)实际上只需要迭代列表。所以你可以把它改成:

public void DoSomething(IEnumerable<Foo> foos)
{
    // Body as before
}

现在您可以将List<Bar>传递给该方法,因为IEnumerable<T>中的Tcovariant