【发布时间】:2018-08-26 14:51:05
【问题描述】:
我有一堆类都扩展了一个特定的基类,如下所示:
public class UIBaseProperties
{
}
public class EasyRawImage : UIBaseProperties
{
public void SetImageDimensions(float? width = null, float? height = null)
{
if(width == null && height == null)
RectOptions.sizeDelta = new Vector2(Img.width, Img.height);
else if(width != null && height == null)
RectOptions.sizeDelta = new Vector2((float)width, (float)width/Img.width*Img.height);
else if(width == null && height != null)
RectOptions.sizeDelta = new Vector2((float)height/Img.height*Img.width, (float)height);
else if(width != null && height != null)
RectOptions.sizeDelta = new Vector2((float)width, (float)height);
}
}
现在我在另一个类中有一个 UIBaseProperties 列表,我向其中添加了所有从 UIBaseProperties 派生的不同实例,如下所示:
public class OpenRecordUI
{
private List<UIBaseProperties> UIElements;
public OpenRecordUI()
{
UIElements = new List<UIBaseProperties>();
UIElements.Add(new EasyRawImage(Resources.Load("Images/" + Data.local_photo_name), new Vector2(50, 50), v.GetActualPixelSizes().size.x, v.GetActualPixelSizes().size.y));
var test = UIElements[0].SetImageDimensions(); // error
}
}
现在当我尝试调用 SetImageDimensions() 函数时出现错误。我得到的错误如下:
“UIBaseProperties”不包含“SetImageDimensions”的定义,也没有扩展方法“SetImageDimensions”
我知道为什么会出现错误,但我不知道如何以其他方式执行此操作。
这甚至可能吗,否则应该怎么做?
如果有什么不清楚的,请告诉我,以便我澄清!
【问题讨论】:
-
SetImageDimensions只属于EasyRawImage -
@Nkosi 是的,我知道,但我的问题是:“有没有办法从基类访问“
SetImageDimensions?” -
在这里你想做什么并不完全清楚——如果你想要一个可以调用
SetImageDimensions的事情列表,那么你需要一个List<EasyRawImage>。作为一般规则,如果您有多个类需要以不同方式进行交互,那么您不应该尝试将它们视为同一事物。 -
@FutureCake 这似乎是XY problem。您要解决的实际问题是什么?
-
@FutureCake 从您发布的内容来看,尚不清楚为什么需要基类,甚至是列表。很明显,您犯了一些设计错误,但如果不了解更多信息,就不可能提出改进建议,而不仅仅是糟糕的解决方法。
标签: c# function class generics inheritance