gpt4 book ai didi

c# - 从污染代码中隐藏基类或接口(interface)

转载 作者:行者123 更新时间:2023-11-30 21:01:18 25 4
gpt4 key购买 nike

这是我无数次遇到的问题..考虑..

[public/private] interface IBase
{
void DoCore();
}

public interface IDerived_A : IBase
{
void Do_A();
}
public interface IDerived_B : IBase
{
void Do_B();
}

这里我有 2 个有用的接口(interface),它们提供一些通用功能(由 IBase 接口(interface)提供),以及它们中任何一个独有的一些其他功能。c# 强制我将 IBase 声明为公共(public)的(与继承接口(interface)的可见性相同) .. 但是,每个人都可以看到 IBase 接口(interface).. 其他任何人都不需要使用此接口(interface).. ppl 只需要访问 IDeriver_X 接口(interface).. 我如何向我的代码用户隐藏 IBase 接口(interface)?我的代码可以有两种用户..

  1. 同一命名空间/程序集中的代码访问 IDerived_X..
  2. 引用包含 IDeriver_X 的程序集的单独项目中的代码..

ps.. 我讨厌公开比必要更多的接口(interface)(必要意味着只有那些 ppl 将直接使用的接口(interface))..ps2..我在类里面面临同样的困境..

编辑:

我觉得这个问题有点被误解了..为此我发布了一个澄清..这个问题不仅仅与接口(interface)有关..它也让我担心类..考虑以下代码..

public abstract class Vehicle
{
// generic vehicle functionality
}
public Car : Vehicle
{
// functionality specific to cars
}
public Truck : Vehicle
{
// functionality specific to trucks
}

Car 和 Truck 是我允许我的代码的用户使用的仅有的两种对象..为了使我的工作更轻松,并避免代码重复,我将公共(public)代码移到了 Vehicle 抽象类..但是这并不意味着用户可以在车辆变量中存储对汽车或卡车的引用。从用户的角度来看,我的代码应该只公开汽车和卡车(而不是车辆或引擎或我在内部使用的任何基类以避免代码重复)..具体来说,我正在寻找一种技术,允许我公开完整的汽车和卡车,但不能公开任何其他不完整的构建 block ,如车辆或引擎..问题是,如果派生,c# 不允许我将基类设为私有(private)类(class)是公开的..这更有意义吗? =)

最佳答案

嗯,

  • 您的子接口(interface)派生自基类是否有意义
  • 或子界面的用户不应该访问基础的 API

在第一种情况下,API IDerived_A 的使用者可以访问 IBase 是合理的。在第二个中,不要从基础 IBase 中获取

其他任何东西,都是 OOP。

作为您界面的使用者,我同时获得了 IBase 和 IDerived_A,因此我有权访问 IBase 是合理的

关于c# - 从污染代码中隐藏基类或接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14297276/

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