[英]Using an Interface as a Parameter Type For Method, Can this work?
我的问题是,如果您有以下形式的方法:
public bool ProcessAggregation(IAggregatePoint point) { #do stuff }
还有一个 class,NetworkAggregation,实现 IAggregatePoint。 你可以调用这样的方法: ProcessAggregation(point) 这里的点是一个 NetworkAggregation 实例吗?
此外,如果不能使用接口,抽象基础 class 的 inheritance 可以工作吗? 意味着从抽象基础 class 继承的任何 object 都可以传递到该方法中吗?
我不愿意使用 inheritance 更改类,因为它们是 MySql 数据库/与 EntityFramework 一起使用的数据库模式。
谢谢!
网络聚合的实现方式如下:
public class NetworkAggregation : IAggregatePoint
{
public DateTime? AssessmentDate {get; set;}
public int Id {get; set;}
public string DUPValue {get; set;}
//And so on, other properties not specified in IAggregatePoint
}
IAggregatePoint 的实现方式如下:
public interface IAggregatePoint
{
public DateTime? AssessmentDate {get; set;}
}
是的,这会起作用。 只要 class 实现IAggregatePoint
接口,就可以将 class 的实例提供给ProcessAggregation
,而不会出现任何问题。 如果您犯了错误(例如尝试使用来自NetworkAggregation
但不是ProcessAggregation
中IAggregatePoint
的一部分的方法),您将收到编译器错误。
正如您所提到的,您也可以使用抽象基础 class 做同样的事情。
查看C# 语言规范关于接口的文档可能是值得的。
编辑 - 这是一个简单的工作示例:
public interface IAggregatePoint
{
}
public class NetworkAggregation : IAggregatePoint
{
}
public class AnotherAggregation
{
}
public void Test()
{
// works because NetworkAggregation implements IAggregatePoint
ProcessAggregation(new NetworkAggregation());
// fails to compile (as expected) because AnotherAggregation
// doesn't implement IAggregatePoint
ProcessAggregation(new AnotherAggregation());
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.