为什么我不能这样做?
IHasOperatingSystem {
IOperatingSystem OperatingSystem { get; }
}
Computer<T> : IHasOperatingSystem where T : IOperatingSystem {
public T OperatingSystem { get; }
}
Run Code Online (Sandbox Code Playgroud)
它告诉我类型应该是IOperatingSystem,但如果T实现IOperatingSystem,那应该不够吗?
此外,我意识到这个问题的标题可能有点令人困惑,但我想不出更好的方式来表达它.
它告诉我类型应该是IOperatingSystem,但如果T实现IOperatingSystem,那应该不够吗?
不,这不是C#的工作方式.为了实现接口或覆盖方法,参数类型和返回类型必须完全匹配.从C#5规范的第13.4.4节:
出于接口映射的目的,类成员A在以下情况下匹配接口成员B:
- A和B是方法,A和B的名称,类型和形式参数列表是相同的.
- ...
(这里"type"应该被理解为"返回类型".)
现在你可以使你的IHasOperatingSystem类型通用,当然:
public interface IHasOperatingSystem<T> where T : IOperatingSystem
{
T OperatingSystem { get; }
}
public class Computer<T> : IHasOperatingSystem<T> where T : IOperatingSystem
{
public T OperatingSystem { get { ... } }
}
Run Code Online (Sandbox Code Playgroud)
或者您可以在Computer<T>类中使用显式接口实现:
public interface IHasOperatingSystem
{
IOperatingSystem OperatingSystem { get; }
}
public class Computer<T> : IHasOperatingSystem where T : IOperatingSystem
{
// Explicit interface implementation...
IHasOperatingSystem.OperatingSystem IOperatingSystem
{
// Delegate to the public property
get { return OperatingSystem; }
}
public T OperatingSystem { get { ... } };
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
97 次 |
| 最近记录: |