c# - 如何在C#中实现条件封装

标签 c# conditional encapsulation

我想知道如何在类里面有条件地隐藏数据。 例如,假设我有一个名为 Car 的类,它具有三个字段: 发动机、仪表读数和里程数。

我还有另外三个实体,分别称为:Driver、Mechanic 和 Passenger。 现在我想要的是:

司机应该只能访问里程(而不是引擎和仪表读数)

机械师应该只能访问引擎和里程(而不是仪表读数)

乘客应该只能访问 MeterReading(而不是 Engine 和 Mileage)

实现这个的最佳方法是什么..(不将整个逻辑基于 if else 语句)?

有什么想法吗?

谢谢。

最佳答案

想到的第一个想法是让您的 Car类实现 3 个不同的接口(interface),每个类可以使用这些接口(interface)与您的 Car 交互类。

例如,(我的名字肯定可以改进,但你应该明白),IDriverAccess界面可能如下:

public interface IDriverAccess
{
  double Mileage { get; }
}

IMechanicAccess界面可能如下:

public interface IMechanicAccess
{
  EngineObject Engine { get; set; }

  double Mileage { get; }
}

等等。然后您的汽车类可以实现这些接口(interface),但司机、机械师和乘客的类将只使用这些接口(interface)与对象交互。

public Car : IDriverAccess, IMechanicAccess, IPassengerAccess
{
  // implement the interfaces
}

关于c# - 如何在C#中实现条件封装,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3932821/

相关文章:

c# - 使用 SendGrid SMTP 电子邮件提交时出现 Bad Request 错误

c# - Itextsharp:如何将文本放在页面中间

c# - 多种数据类型的列表?

data-structures - 从 Clojure 中的数据结构实现细节中抽象出来

Java私有(private)字段的继承

java - 私有(private)类变量与过多的参数传递

c# - 外键映射到 Entity Framework 中的复合键

variables - 如何使用 TFS 构建有条件地跳过或执行任务/步骤?

Javascript:循环属性内的条件递增或递减

for-loop - pl/sql循环记录select oracle plsql