gpt4 book ai didi

.net - 公开的嵌套类型

转载 作者:行者123 更新时间:2023-12-04 17:13:38 27 4
gpt4 key购买 nike

我很好奇在涉及 .NET 中的嵌套类型的某些场景中什么是好的做法。

假设您有一个 Wheel 类,并且 Wheel 类包含 Bearing 对象。 Bearing 对象仅在 Wheel 中有意义,并且您不希望允许独立创建它,因此将 Bearing 类嵌套在 Wheel 对象中是有意义的。但是,假设您现在需要在 Wheel 类之外读取 Wheel.Bearings 属性。这现在需要将嵌套的 Bearing 类公开。

在这种情况下,最好的选择是什么?
1 - 创建一个嵌套在 Wheel 类中的公共(public)轴承类
2 - 创建一个独立的轴承类,该类在其构造函数中采用 Wheel 对象
3 - 创建一个 Wheel 命名空间并在此命名空间内创建一个独立的 Bearing 类。
4 - 别的?

更新:
我正在更新更多细节并反射(reflect)迄今为止的一些建议。 ClassParent 是父类,ClassChild 是子类。 ClassChild 始终是 ClassParent 的 child ,单独存在是没有意义的。问题是 ClassChild 有一些属性需要公开公开,而其余的只能从 ClassParent 调用。一个示例是不应公开公开的 ClassChild.Delete 函数,因为它只能从 ClassParent 调用,因为 ClassParent 需要执行适当的清理和修改。

在查看了这些建议之后,我提出的设计对我来说看起来有点不干净,所以我想我会征求意见。我有:

public class Parent
{
ChildNested childObj

public DeleteChild()
{
//expose this method publically
childObj.DeleteChild()
//other functionality
}

public Child GetChild()
{
//expose Child, not ChildNested publically
return childObj
}

private class ChildNested:Child
{
public Child()
{
Base.Child()
}
public DeleteChild()
{
Base.Delete()
}
}

public abstract class Child
{
protected Child()
{
}
protected Delete()
{
}
public PublicPropertyToExpose()
{
}
}

最佳答案

这里最好的设计是创建一个公共(public)Bearing带有 internal 的类构造函数,并在 Wheel 中创建它的实例类(class)。

如果 Bearing类需要访问 Wheel 的私有(private)成员上课,可以公开Bearing类(class) abstract , 然后具体实现为 private Wheel 内的嵌套类.

一般情况下,you should not make public nested types .

关于.net - 公开的嵌套类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2418859/

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