如何从基础访问继承对象的成员

时间:2017-08-22 00:23:42

标签: c# inheritance

我很抱歉标题不清楚,我不确定如何说出来 我有一个界面;我们称之为Iinterface;

public interface Iinterface
{
    //Some members
}

我还有一个继承自Iinterface的抽象类;我们可以调用这个Aabstract,这个方法有一个名为dosomething()的方法。

public abstract class Aabstract : Iinterface
{
    public void dosomething()
    {

    }
}

我的代码的一部分中有一个名为List<Iinterface>的{​​{1}},其中每个I接口可能是也可能不是listofIinterfaces
我怎样才能做以下事情(但有效)

Aabstract

1 个答案:

答案 0 :(得分:2)

根据评论中的建议,您可以使用as尝试投射相应的类型:

namespace Sample {
    public interface IThing {

    }

    public class Type1 : IThing {
        public void Foo() { }
    }

    public class Type2 : IThing {
        public void Bar() { }
    }

    public class Program {
        static void Main(string[] args) {
            var list = new List<IThing> {
                new Type1(),
                new Type2()
            };

            foreach (var item in list) {
                var t1 = item as Type1;
                if (t1 != null) {
                    t1.Foo();
                }
            }
        }
    }
}

如果您使用的是C#7.0,也可以打开类型,示例来自here

switch(shape)
{
    case Circle c:
        WriteLine($"circle with radius {c.Radius}");
        break;
    case Rectangle s when (s.Length == s.Height):
        WriteLine($"{s.Length} x {s.Height} square");
        break;
    case Rectangle r:
        WriteLine($"{r.Length} x {r.Height} rectangle");
        break;
    default:
        WriteLine("<unknown shape>");
        break;
    case null:
        throw new ArgumentNullException(nameof(shape));
}