如何将对嵌套类成员的访问限制为封闭类?

2024-04-05

是否可以指定嵌套类的成员可以由封闭类访问,但不能由其他类访问?

这是问题的说明(当然我的实际代码有点复杂......):

public class Journal
{
    public class JournalEntry
    {
        public JournalEntry(object value)
        {
            this.Timestamp = DateTime.Now;
            this.Value = value;
        }

        public DateTime Timestamp { get; private set; }
        public object Value { get; private set; }
    }

    // ...
}

我想阻止客户端代码创建实例JournalEntry, but Journal必须能够创建它们。如果我将构造函数设为公开,任何人都可以创建实例...但如果我将其设为私有,Journal将无法!

请注意,JournalEntry类必须是公共的,因为我希望能够向客户端代码公开现有条目。

任何建议将不胜感激!


更新:感谢大家的意见,我最终选择了公众IJournalEntry接口,由私有实现JournalEntry类(尽管我的问题中的最后一个要求......)


实际上,这个问题有一个完整且简单的解决方案,不涉及修改客户端代码或创建接口。

在大多数情况下,该解决方案实际上比基于接口的解决方案更快,并且更易于编码。

public class Journal
{
  private static Func<object, JournalEntry> _newJournalEntry;

  public class JournalEntry
  {
    static JournalEntry()
    {
      _newJournalEntry = value => new JournalEntry(value);
    }
    private JournalEntry(object value)
    {
      ...
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何将对嵌套类成员的访问限制为封闭类? 的相关文章

  • WPF DataGrid 多选

    我读过几篇关于这个主题的文章 但很多都是来自 VS 或框架的早期版本 我想做的是从 dataGrid 中选择多行并将这些行返回到绑定的可观察集合中 我尝试创建一个属性 类型 并将其添加到可观察集合中 它适用于单个记录 但代码永远不会触发多个
  • 在 xaml 中编写嵌套类型时出现设计时错误

    我创建了一个用户控件 它接受枚举类型并将该枚举的值分配给该用户控件中的 ComboBox 控件 很简单 我在数据模板中使用此用户控件 当出现嵌套类型时 问题就来了 我使用这个符号来指定 EnumType x Type myNamespace
  • 类型中的属性名称必须是唯一的

    我正在使用 Entity Framework 5 并且有以下实体 public class User public Int32 Id get set public String Username get set public virtual
  • std::list 线程push_back、front、pop_front

    std list 线程安全吗 我假设不是这样 所以我添加了自己的同步机制 我认为我有正确的术语 但我仍然遇到问题 每个函数都由单独的线程调用 Thread1 不能等待 它必须尽可能快 std list
  • 如何从 Visual Studio 将视图导航到其控制器?

    问题是解决方案资源管理器上有 29 个项目 而且项目同时具有 ASP NET MVC 和 ASP NET Web 表单结构 在MVC部分中 Controller文件夹中有大约100个子文件夹 每个文件夹至少有3 4个控制器 视图完全位于不同
  • std::vector 与 std::stack

    有什么区别std vector and std stack 显然 向量可以删除集合中的项目 尽管比列表慢得多 而堆栈被构建为仅后进先出的集合 然而 堆栈对于最终物品操作是否更快 它是链表还是动态重新分配的数组 我找不到关于堆栈的太多信息 但
  • 如何使从 C# 调用的 C(P/invoke)代码“线程安全”

    我有一些简单的 C 代码 它使用单个全局变量 显然这不是线程安全的 所以当我使用 P invoke 从 C 中的多个线程调用它时 事情就搞砸了 如何为每个线程单独导入此函数 或使其线程安全 我尝试声明变量 declspec thread 但
  • 需要帮助优化算法 - 两百万以下所有素数的总和

    我正在尝试做一个欧拉计划 http projecteuler net问题 我正在寻找 2 000 000 以下所有素数的总和 这就是我所拥有的 int main int argc char argv unsigned long int su
  • 人脸 API DetectAsync 错误

    我想创建一个简单的程序来使用 Microsoft Azure Face API 和 Visual Studio 2015 检测人脸 遵循 https social technet microsoft com wiki contents ar
  • C# - 当代表执行异步任务时,我仍然需要 System.Threading 吗?

    由于我可以使用委托执行异步操作 我怀疑在我的应用程序中使用 System Threading 的机会很小 是否存在我无法避免 System Threading 的基本情况 只是我正处于学习阶段 例子 class Program public
  • 如何定义一个可结构化绑定的对象的概念?

    我想定义一个concept可以检测类型是否T can be 结构化绑定 or not template
  • C 编程:带有数组的函数

    我正在尝试编写一个函数 该函数查找行为 4 列为 4 的二维数组中的最大值 其中二维数组填充有用户输入 我知道我的主要错误是函数中的数组 但我不确定它是什么 如果有人能够找到我出错的地方而不是编写新代码 我将不胜感激 除非我刚去南方 我的尝
  • 为什么使用小于 32 位的整数?

    我总是喜欢使用最小尺寸的变量 这样效果就很好 但是如果我使用短字节整数而不是整数 并且内存是 32 位字可寻址 这真的会给我带来好处吗 编译器是否会做一些事情来增强内存使用 对于局部变量 它可能没有多大意义 但是在具有数千甚至数百万项的结构
  • C# 中的 IPC 机制 - 用法和最佳实践

    不久前我在 Win32 代码中使用了 IPC 临界区 事件和信号量 NET环境下场景如何 是否有任何教程解释所有可用选项以及何时使用以及为什么 微软最近在IPC方面的东西是Windows 通信基础 http en wikipedia org
  • C++ 继承的内存布局

    如果我有两个类 一个类继承另一个类 并且子类仅包含函数 那么这两个类的内存布局是否相同 e g class Base int a b c class Derived public Base only functions 我读过编译器无法对数
  • C++ 中的 include 和 using 命名空间

    用于使用cout 我需要指定两者 include
  • 当文件流没有新数据时如何防止fgets阻塞

    我有一个popen 执行的函数tail f sometextfile 只要文件流中有数据显然我就可以通过fgets 现在 如果没有新数据来自尾部 fgets 挂起 我试过ferror and feof 无济于事 我怎样才能确定fgets 当
  • DotNetZip:如何提取文件,但忽略zip文件中的路径?

    尝试将文件提取到给定文件夹 忽略 zip 文件中的路径 但似乎没有办法 考虑到其中实现的所有其他好东西 这似乎是一个相当基本的要求 我缺少什么 代码是 using Ionic Zip ZipFile zf Ionic Zip ZipFile
  • 类型或命名空间“MyNamespace”不存在等

    我有通常的类型或命名空间名称不存在错误 除了我引用了程序集 using 语句没有显示为不正确 并且我引用的类是公共的 事实上 我在不同的解决方案中引用并使用相同的程序集来执行相同的操作 并且效果很好 顺便说一句 这是VS2010 有人有什么
  • 现代编译器是否优化乘以 1 和 -1

    如果我写 template

随机推荐

  • Python 数据结构开销/性能

    在 Python 中使用列表比使用字典和元组有任何性能优势吗 如果我正在优化速度 是否有任何理由选择其中一种而不是另一种 Rich 列表和字典是适合不同需求的野兽 确保您不使用列表进行线性搜索 其中字典哈希是完美的 因为它的速度要慢得多 另
  • 使用 .resx 文件和卫星程序集是否有性能差异?

    在构建本地化的 aspx Web 应用程序 卫星程序集的 resx 文件 时 哪种方法是最好的前进方式 网络上是否有任何可用的性能比较 嗯 不知道这样的比较是否有效 ResX 是一种以 XML 形式存储资源的存储格式 在嵌入 如果指定 到程
  • 使用 numpy 保存列表时内存不足

    我有一个相当大的列表 代表搜狗文本分类数据集中的标记 我可以处理 450 000 的整个训练集 并剩下 12 GB 的内存 但是当我在列表列表上调用 numpy save 时 内存使用量似乎增加了一倍 并且内存不足 为什么是这样 numpy
  • 在预构建的 docker 容器中更改用户的 uid (jenkins)

    我是 docker 的新手 所以如果这是我遗漏的一个相当明显的过程 我确实为前面的愚蠢问题道歉 我正在使用以下命令设置持续集成服务器jenkins泊坞窗图像 我做了一个docker pull jenkins 并创建了一个用户jenkins让
  • 浏览器中的图像缓存 - app-engine-patch 应用程序

    我在浏览器中为应用程序引擎应用程序缓存图像时遇到一些问题 我正在发送上次修改 过期和缓存控制标头 但每次都会从服务器加载图像 这是代码的标题部分 响应 内容类型 图像 jpg 响应 上次修改 current time strftime a
  • 如何将 Google Sheet 中的日期转换为字符串

    我想弄清楚如何将日期转换为谷歌表中的字符串 我有一个具有不同格式的日期字段 我想创建另一个与字面意思相同但作为文本的列 例如 如果我有以下数据 date date as string 12 05 2016 12 05 2016 12 5 2
  • 转储文件分析

    Recently I start facing issue on few servers where CPU start consuming more resources than usual trend I am trying to fi
  • VB.Net:如何在CEF中安装插件/扩展?

    我正在制作一个 vb net 网络浏览器 以及我正在使用的浏览引擎ChromeWebBrowser Net https sourceforge net projects chromewebbrowse source recommended
  • 在Windows操作系统中隐藏C程序的控制台

    我想在运行应用程序时隐藏我的 C 控制台 如何让我的应用程序在后台运行 程序与main 默认情况下编译为 SUBSYSTEM CONSOLE 应用程序并获取控制台窗口 如果您拥有应用程序正在启动的其他进程 则可以通过以下方法之一将它们修改为
  • 这些诸如 TFS 之类的多文档图标是什么意思?

    有谁知道 TFS 2017 源代码管理资源管理器中这些图标的含义是什么 文件是 cpp和 h 新添加的两个文件的图标显示正确 如下所示 但现有文件都变成了多黄色文档 为什么它替换了图标对于文件类型 图标最初加载正确 但在分析后似乎发生了变化
  • Codeigniter 文件路径

    抱歉打扰 但我对 codeigniter 中的文件路径有些困惑 因为您可能知道也可能不知道 CI 的文件系统布局如下 application controllers views models system contains CI frame
  • 从本地 apache 服务器发送邮件

    我想从我的 PHP Web 应用程序发送电子邮件 我知道这是可能的 因为几个月前 我的系统上有这个 功能 然后我开始使用 xampp 并且该功能消失了 我想 当我回到本地服务器并使用本地 MySQL 数据库和像以前一样的东西时 我可以再次从
  • phpexcel在单元格范围上设置数据类型

    With PHPExcel http phpexcel codeplex com 我在用着 workSheet gt fromArray array 设置我的数据 但是 需要将一列设置为字符串 带有前导零的数字 如果不设置为字符串 前导零将
  • PHP DOMDocument loadHTML 未正确编码 UTF-8

    我正在尝试使用 DOMDocument 解析一些 HTML 但是当我这样做时 我突然丢失了我的编码 至少在我看来是这样 profile div p various japanese characters p div dom new DOMD
  • VBA (Excel) ActiveX 列表框更改事件递归行为

    我不是 VBA 程序员 因此如果我在这个问题中的某些术语不正确 我提前道歉 我的一位同事希望在选择列表框后立即清除该选择 经过一番谷歌搜索后 我们发现一种方法是通过 Change 事件 最初我们尝试过 Private Sub ListBox
  • 如何在 NSMutableArray 中存储 CGRect 值?

    我如何将 CGRect 对象存储在 NSMutableArray 中 然后再检索它们 你需要将 CG 结构包裹在NSValue类 所以 NSMutableArray array NSMutableArray mutableArray arr
  • ggplot barplot 中 y 轴的顺序错误

    在此条形图中 条形图的缩放方式不同 因此 y 轴的排序不正确 157 gt 1342 6 我该如何解决 library reshape library ggplot2 data lt matrix 1 9 3 3 colnames data
  • Protobuf 编译问题

    我一直在尝试运行 TensorFlow 库 为此我必须编译 Protobuf 库 我正在使用以下命令 C tensorflow master tensorflow models gt protoc object detection prot
  • 如何让J2ME应用程序在后台运行?

    我编写了一个 J2ME 应用程序 它使用蓝牙并在对等移动设备中搜索文件并下载它 我想让我的应用程序在后台运行 每当我接到电话或消息并在几秒钟后恢复时 有人从事过这方面的工作吗请分享您的经验 有什么办法可以在后台运行 Midlet 吗 要将
  • 如何将对嵌套类成员的访问限制为封闭类?

    是否可以指定嵌套类的成员可以由封闭类访问 但不能由其他类访问 这是问题的说明 当然我的实际代码有点复杂 public class Journal public class JournalEntry public JournalEntry o