В унаследованном классе я использую базовый конструктор, но я не могу использовать членов класса, вызывающих этот базовый конструктор.
В этом примере у меня есть PicturedLabel, который знает свой собственный цвет и имеет изображение. TypedLabel : PictureLabel
знает свой тип, но использует базовый цвет.
(базовое) изображение, использующее TypedLabel, должно быть окрашено в (базовый) цвет, однако я не могу получить этот цвет
Ошибка: ключевое слово 'this' недоступно в текущем контексте`
Обходной путь?
/// base class
public class PicturedLabel : Label
{
PictureBox pb = new PictureBox();
public Color LabelColor;
public PicturedLabel()
{
// initialised here in a specific way
LabelColor = Color.Red;
}
public PicturedLabel(Image img)
: base()
{
pb.Image = img;
this.Controls.Add(pb);
}
}
public enum LabelType { A, B }
/// derived class
public class TypedLabel : PicturedLabel
{
public TypedLabel(LabelType type)
: base(GetImageFromType(type, this.LabelColor))
//Error: Keyword 'this' is not available in the current context
{
}
public static Image GetImageFromType(LabelType type, Color c)
{
Image result = new Bitmap(10, 10);
Rectangle rec = new Rectangle(0, 0, 10, 10);
Pen pen = new Pen(c);
Graphics g = Graphics.FromImage(result);
switch (type) {
case LabelType.A: g.DrawRectangle(pen, rec); break;
case LabelType.B: g.DrawEllipse(pen, rec); break;
}
return result;
}
}