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

标签 c# nested-class access-levels

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

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

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 的实例,但 Journal 必须能够创建它们。如果我将构造函数公开,任何人都可以创建实例...但如果我将其设为私有(private),Journal 将无法创建实例!

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

如有任何建议,我们将不胜感激!


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

最佳答案

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

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

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

  public class JournalEntry
  {
    static JournalEntry()
    {
      _newJournalEntry = value => new JournalEntry(value);
    }
    private JournalEntry(object value)
    {
      ...

关于c# - 如何将对嵌套类成员的访问限制为封闭类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1664793/

相关文章:

c# - C#中的嵌套类

UWP 中的 C# XML 序列化

c++ - 在这种情况下我应该使用嵌套类吗?

java - 我应该使用嵌套类来封装 map 值吗?

c++ - 类中的默认安全参数

java - 为什么方法的私有(private)访问比包私有(private)更可取?

C# 对象引用未设置为对象的实例。在列表中实例化类?

c# - 使用 LINQ 在另一个数组中的数组条目的索引

C# WPF : Changing current tab with button click?