【发布时间】:2017-04-23 07:12:30
【问题描述】:
在这里运行它:http://rextester.com/ZMLMB2576
public interface IClass {
int number {get;}
}
public abstract class BaseClass : IClass {
public BaseClass(int n){
number = n+100;
}
public int number { get;set;}
}
public class DerivedClass : BaseClass {
public DerivedClass(int n) : base(n) {
number = n;
}
public int number { get;set;}
}
public class Program
{
public static void Main(string[] args)
{
var foobar = new DerivedClass(1);
Console.WriteLine(GetNumber(foobar)); // 101
}
public static int GetNumber(IClass foo){
return foo.number;
}
}
为什么函数GetNumber不使用派生最多的类,而是只将传递的对象视为BaseClass?
如果将传递的对象 (foo) 视为 DerivedClass,那么我怀疑先运行基本构造函数,然后运行 DerivedClass 构造函数,用 1 覆盖 101
【问题讨论】:
-
让它
virtual和override它。
标签: c# inheritance interface