我的编码有点困难 所以我正在制作进度条,但我在C#中尝试使用OOP编程。 我有两个类,一个CProgressBar和ProgressBar类 ProgressBar继承自CProgressBar并获取其变量但我希望将CProgressBar中的两个变量设为public,但仍然将它们保存在ProgressBar中。 我还要提一下,这是针对Unity3D的,因此是RawImg类。
更新: 所以在一些人评论了一些方法之后,我觉得答案并没有解决我的特定问题。我会重新说一句。
[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]属性,它也会在继承的类上隐藏它们。我不想要那个。
我想现在我必须公开两个变量,让我的用户改变那些我不想改变的事情。
答案 0 :(得分:0)
代码错了。这取决于你想要做什么。
在你的代码中,你试图覆盖一个成员;这是不可能的。为什么有私人财产需要改变。
public abstract class CProgressBar : MonoBehaviour
{
public virtual RawImage RawImg
{
get;
protected set;
}
public virtual Material Mat
{
get;
protected set;
}
}
public class ProgressBar : CProgressBar
{
public ProgressBar()
{
Mat = null;
RawImg = null;
}
}
或
public abstract class CProgressBar : MonoBehaviour
{
protected abstract RawImage RawImg
{
get;
}
protected abstract Material Mat
{
get;
}
}
public class ProgressBar : CProgressBar
{
protected override RawImage RawImg => null;
protected override Material Mat => null;
}
或
public abstract class CProgressBar : MonoBehaviour
{
protected virtual RawImage _rawImg
{
get => rawImg;
private set => rawImg = value;
}
protected virtual Material _mat
{
get => mat;
private set => mat = value;
}
private RawImage rawImg;
private Material mat;
}
public class ProgressBar : CProgressBar
{
protected override RawImage _rawImg => null;
protected override Material _mat => null;
}
我知道这是一个愚蠢的例子。当您需要一个属性时,这根本不是正确的使用方法。尝试更具体地定义您的问题。