繁体   English   中英

使用接口作为方法的参数类型,这可以工作吗?

[英]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但不是ProcessAggregationIAggregatePoint的一部分的方法),您将收到编译器错误。

正如您所提到的,您也可以使用抽象基础 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM