gpt4 book ai didi

c# - 如何实现内部接口(interface)的成员

转载 作者:IT王子 更新时间:2023-10-29 04:28:34 24 4
gpt4 key购买 nike

我一直在重构我目前正在进行的项目的代码库,以便将在程序集范围之外无用的类/接口(interface)声明为内部(而不是公共(public))。但是我遇到了以下代码的问题:

internal interface IFirstInterface
{
...
}

internal interface ISecondInterface
{
IFirstInterface First{ get; }
...
}

public class Implementer : ISecondInterface
{
public IFirstInterface First {get; private set;}
...
}

我的问题:

  1. 为什么必须公开实现内部接口(interface)的成员?如果在内部类上实现接口(interface),实现的成员不应该是内部的吗?这不是一个大问题,因为接口(interface)成员无论如何都不能公开访问,因为类是内部的。这似乎违反直觉。

  2. 主要问题出在上面的场景中,因为我无法为 IFirstInterface 提供公共(public) getter,因为据称它是一个内部接口(interface),即我从编译器中收到以下错误:

Inconsistent accessibility: property type 'IFirstInterface' is less accessible than property 'Implementer.First'

有什么办法解决这个问题吗?

注意:我意识到这个重构练习可能没有什么值(value),但我认为这对我来说是一个更好的方式来更深入地理解内部修饰符的含义。

最佳答案

请注意 - 您实际提供的代码确实可以编译,因为Implementer 是一个内部类。当 Implementer 公开时,问题就来了。

解决这个问题的方法是使用显式接口(interface)实现:

public class Implementer : ISecondInferface
{
private IFirstInterface first;
IFirstInterface ISecondInterface.First { get { return first; } }
}

你不能在那里有 setter,因为你显式地实现了没有定义 setter 的接口(interface)。作为替代方案,您可以这样做:

public class Implementer : ISecondInterface
{
internal IFirstInterface First { get; private set; }
IFirstInterface ISecondInterface.First { get { return First; } }
}

不幸的是,内部接口(interface)有公共(public)成员——它确实使这样的事情复杂化。一个公共(public)接口(interface)有一个内部成员会很奇怪(什么是内部成员 - 实现者或声明者?)但对于内部接口(interface),它更有意义。

关于c# - 如何实现内部接口(interface)的成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1221392/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com