C# 如何在基类中隐藏变量,但在继承类中显示它们
我在编码上有点卡住了。C# 如何在基类中隐藏变量,但在继承类中显示它们,c#,unity3d,C#,Unity3d,我在编码上有点卡住了。 所以我正在制作一个progressbar,但我正在用C#进行面向对象编程的实验。 我有两个班,一个是CProgressBar班,另一个是ProgressBar班。 ProgressBar继承自CProgressBar并获取其变量,但我想将CProgressBar中的两个变量设置为公共变量,但仍将它们保留为ProgressBar中的私有变量。 我还应该提到,这是针对Unity3D的,因此是RawImg类 更新: 因此,在一些人评论了一些方法之后,我觉得答案并不能解决我的特定
所以我正在制作一个progressbar,但我正在用C#进行面向对象编程的实验。 我有两个班,一个是CProgressBar班,另一个是ProgressBar班。
ProgressBar继承自CProgressBar并获取其变量,但我想将CProgressBar中的两个变量设置为公共变量,但仍将它们保留为ProgressBar中的私有变量。
我还应该提到,这是针对Unity3D的,因此是RawImg类 更新: 因此,在一些人评论了一些方法之后,我觉得答案并不能解决我的特定问题。我将重新措辞
- 我希望CProgressBar和ProgressBar在Unity编辑器中可见。其中一个答案显示CProgressBar类是抽象的,但这将在Unity编辑器中隐藏该类,因此这是错误的
- mat和rawImg都应隐藏在CProgressBar上,但在ProgressBar上显示
- 这些变量不一定需要较少的访问,它们只需要隐藏在基类上
- 使用[HideInInsectt]属性将是一种攻击,但不确定在何处使用它
如果我在基类变量上放置[HideInInsectt]属性,它也会在继承的类上隐藏它们。我不想那样// 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;
我想现在我必须公开这两个变量,允许我的用户更改我不希望他们更改的内容。代码是错误的。这取决于你想做什么 在代码中,您试图覆盖一个成员;这是不可能的。以及为什么有私人财产需要改变
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;
}
}
或
或
我知道这是一个愚蠢的例子。当您需要一个属性时,这根本不是正确的使用方法。请尝试更具体地定义您的问题。“我想将CProgressBar中的两个变量设置为公共变量,但仍将它们设置为CProgressBar中的私有变量。”如中所述,当
重写属性时,您无法更改辅助功能修饰符。再次查看,您试图重写成员变量,这在C#中是不允许的,似乎是一个错误,他应该将属性声明为受保护的
,并重写这些属性,而不是私有
支持字段。他有领先的优势。
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;
}