Вы можете объявить UIBaseProperties
как класс abstract
и SetImageDimensions
как метод abstract
. Затем в каждом производном классе от UIBaseProperties
вы должны предоставить реализацию для этого метода.
public abstract class UIBaseProperties
{
public abstract SetImageDimensions(float? width = null, float? height = null);
}
Тогда, переопределив SetImageDimensions
, ошибка больше не будет существовать.
public class EasyRawImage : UIBaseProperties
{
public override 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);
}
}
Другим подходом было бы избежать наследования (определить базовый класс, затем извлечь из него и т. Д.). Вы можете получить тот же результат, объявив интерфейс, а затем каждый класс, который вы упомянули для реализации этого интерфейса:
// The name of the interface is not very good, you should probably
// think for another name.
public interface IUIBaseProperties
{
void SetImageDimensions(float? width = null, float? height = null)
}
Затем повторно объявите свой класс, как показано ниже:
public class EasyRawImage : IUIBaseProperties
{
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);
}
}
и используйте его, как показано ниже:
public class OpenRecordUI
{
private List<IUIBaseProperties> UIElements;
public OpenRecordUI()
{
UIElements = new List<IUIBaseProperties>();
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();
}
}