C#没有嵌套在父类中的私有类

C#没有嵌套在父类中的私有类,c#,C#,在C#中是否可以定义私有类而不嵌套在父类中?下面是我尝试做的一个简单例子 public abstract class ClassA<T> { public T Value { get; set; } public ClassA(T value) { Value = value; } } private class ClassB : ClassA<int> { public ClassB(int value)

在C#中是否可以定义私有类而不嵌套在父类中?下面是我尝试做的一个简单例子

public abstract class ClassA<T> 
{
    public T Value { get; set; }

    public ClassA(T value)
    {
        Value = value;
    }
}

private class ClassB : ClassA<int>
{
    public ClassB(int value) 
        : base(value)
    {
    }
}
公共抽象类ClassA
{
公共T值{get;set;}
公共A类(T值)
{
价值=价值;
}
}
B类:A类
{
公共类B(int值)
:基准(值)
{
}
}


我希望
ClassB
只能由
ClassA
访问。我想知道如果这两个类在同一个文件中,我想做的是否可能。基本上,隐藏
ClassA
的扩展会很好,但我不希望嵌套太多的类

单独拥有一个私有类的目的是什么?您将无法引用该类。私有类只能在另一个类中使用,因为外部类可以访问它。

拥有自己的私有类的目的是什么?您将无法引用该类。私有类只能在其他类内访问,因为外部类可以访问它。

类的默认可访问性为“内部”,这意味着只能从声明程序集中访问(合法地)这些类。正如Francisco所说,对可见性的进一步限制对于非嵌套类型没有多大意义。

类的默认可访问性是“内部”的,这意味着只能从声明程序集中(合法)访问它们。正如Francisco所说,对可见性的进一步限制对于非嵌套类型没有多大意义。

这是有意义的。我猜没有其他方法可以实现我想要实现的目标?从概念上讲,这种方法毫无意义。将
A
内部化,并将
B
A
保持在相同的状态assembly@Orphid,它可能是默认值,但通过指定它,您向其他人表明您的意思,而不是忘记指定访问修饰符。这同样适用于类中的
private
。@Orphid,当然这是主观的。不过,这并不是说要知道默认访问修饰符是什么;这一切都是为了明确你的意图。它提高了可维护性。但它在主观上改善了它,这是有道理的。我猜没有其他方法可以实现我想要实现的目标?从概念上讲,这种方法毫无意义。将
A
内部化,并将
B
A
保持在相同的状态assembly@Orphid,它可能是默认值,但通过指定它,您向其他人表明您的意思,而不是忘记指定访问修饰符。这同样适用于类中的
private
。@Orphid,当然这是主观的。不过,这并不是说要知道默认访问修饰符是什么;这一切都是为了明确你的意图。它提高了可维护性。但它在主观上改进了它。这里有一些根本性的错误,为什么你想让父类了解它的子类呢?抽象的要点是将实现的责任委托给子类,以便父类不必定义或了解实现。你的意思是你只想让子类了解父类吗?标记抽象意味着无论如何没有人可以创建ClassA的实例…@RonBeyer,在使用
abstract
而不是
sealed
时,一切都会出错……)@RonBeyer我真的不喜欢嵌套像类那样密集的东西——我可以看出在这个特殊的例子中它有什么意义。这里有一些根本错误,为什么你想让父类知道它的子类?抽象的要点是将实现的责任委托给子类,以便父类不必定义或了解实现。你的意思是你只想让子类了解父类吗?标记抽象意味着无论如何没有人可以创建ClassA的实例…@RonBeyer,在使用
abstract
而不是
sealed
时,一切都会出错……)@RonBeyer我真的不喜欢嵌套像类那样密集的东西——不过,在这个特殊的例子中,我可以看出它有什么意义。