【发布时间】:2018-09-02 23:09:48
【问题描述】:
我的编码有点卡住了。
所以我正在制作一个进度条,但我正在尝试用 C# 进行 OOP 编程。
我有两个类,一个 CProgressBar 和 ProgressBar 类。
ProgressBar 继承自 CProgressBar 并获取其变量,但我想将 CProgressBar 中的两个变量公开,但仍将它们保留在 ProgressBar 中。
我还应该提到这是针对 Unity3D 的,因此是 RawImg 类。
更新: 因此,在某些人评论了一些方法之后,我觉得答案并不能解决我的特定问题。我将重新措辞。
- 我希望 CProgressBar 和 ProgressBar 在 Unity 编辑器中可见。其中一个答案显示 CProgressBar 类是抽象的,但这会在 Unity 编辑器中隐藏该类,因此不存在。
- mat 和 rawImg 都应该在 CProgressBar 上隐藏,但在 ProgressBar 上显示。
- 变量不一定需要较少的访问权限,它们只需要隐藏在基类中即可。
-
[HideInInspector] 属性的使用会是一种技巧,但不确定在哪里使用它。
// public CProgressBar.cs public abstract RawImage rawImg { get; } public abstract Material mat { get; } // public ProgressBar.cs public override RawImage rawImg => null; public override Material mat => null;如果我将 [HideInInspector] 属性放在基类变量上,它也会将它们隐藏在继承类上。我不想那样。
我想现在我将不得不公开这两个变量,允许我的用户更改我不希望他们更改的内容。
【问题讨论】:
-
“我想公开 CProgressBar 中的两个变量,但在 CProgressBar 中仍然保持私有。”
-
如documentation 中所述,当
override使用属性时,您无法更改可访问性修饰符 -
第二次看你试图
override成员variables,这在C#中是不允许的 -
他应该将属性声明为
protected并覆盖这些属性而不是private支持字段。他的前导下划线约定是倒着的。