public interface ITimeable {}
public class TimedDoor : ITimeable {}
public static class Timer
{
public static void Add(ITimeable obj)
{
Console.Write("Add with parameter - ITimeable");
}
public static void Add(TimedDoor obj)
{
Console.Write("Add with parameter - TimedDoor");
}
}
public class BaseClient<T> where T : ITimeable
{
public T TimedDoorObject;
public virtual void Init()
{
Timer.Add(TimedDoorObject);
}
}
public class Client : BaseClient<TimedDoor>
{
public Client()
{
TimedDoorObject = new TimedDoor();
}
public override void Init()
{
Timer.Add(TimedDoorObject);
}
}
在这里,Client.Init()
返回 "带参数添加 - 带计时门"
但是如果客户端没有重写 Init(),
public class Client : BaseClient<TimedDoor>
{
public Client()
{
TimedDoor = new TimedDoor();
}
}
在这里,
Client.Init()
返回"带参数添加-ITimeable"
。这是怎么发生的?在运行时,
TimedDoorObject
在两种情况下都是相同的。
Init
方法在两种情况下返回的内容时,交换了字符串。 - Jeppe Stig Nielsen