我很抱歉标题不清楚,我不确定如何说出来
我有一个界面;我们称之为Iinterface
;
public interface Iinterface
{
//Some members
}
我还有一个继承自Iinterface
的抽象类;我们可以调用这个Aabstract
,这个方法有一个名为dosomething()
的方法。
public abstract class Aabstract : Iinterface
{
public void dosomething()
{
}
}
我的代码的一部分中有一个名为List<Iinterface>
的{{1}},其中每个I接口可能是也可能不是listofIinterfaces
我怎样才能做以下事情(但有效)
Aabstract
答案 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));
}