【发布时间】:2017-04-03 08:41:38
【问题描述】:
我正在查看来自 Using SignalR in WinForms and WPF 的示例,以便了解如何在 .NET 客户端应用程序/dll 中实现 SignalR。我遇到了一些我不明白的概念。
private IHubProxy HubProxy { get; set; }
当查看IHubProxy 时,我可以看到它是一个接口。我一直都明白,你不能创建一个接口的实例,但如果你实现它告诉新类它必须实现什么方法,它更像是一个新类的契约。
作为属性的接口设置如何工作?
【问题讨论】:
-
这意味着任何实现 IHubProxy 的东西都可以设置为该属性,但它将是某物的具体实例。但您只关心它使用 IHubProxy 合约作为该属性的消费者,您并不关心实现细节。
-
感谢您的快速回答!只是为了确保我理解这一点。属性 HubProxy 可以保存具有 IHubProxy 接口作为类定义一部分的类的对象/实例。由此我知道,当我从属性中处理对象时,它确实理解特定的消息?
-
是的,除非它为空,否则它绝对会提供一些具体的行为。
-
好的,知道了。但这与将属性定义为特定类有何不同?假设有一个像这样的类:
public class HubProxy : IHubProxy使用这个类而不是像这样的接口会有什么效果:public HubProxy hubProxy { get; set; } -
因为 IHubProxy 可以是任何实现,而 HubProxy 是一种特定的实现。我建议阅读依赖注入。一般的想法是不使用特定的实现细节,除非有必要
标签: c# oop properties interface