我有一个班级
abstract class EmployeeBase
{
}
我希望这个EmployeeBase
不应该在我的任何其他类中用作属性。只有派生自EmployeeBase
的类才能用于在任何其他类中声明属性。是否有可能实现这一目标?如果是这样,怎么样?
答案 0 :(得分:1)
您无法创建抽象类的实例,因此不会创建/*draw red square on the button*/
glBegin(GL_QUADS);
glColor3f(1.0f, 0.0f, 0.0f);
const int SQUARE_SIDE = 6; // Or however long you want a side
// Calculate the centre of the button rectangle
const int xMid = b->x + b->w / 2;
const int yMid = b->y + b->h / 2;
// Trace a square around the centre
glVertex2i(b->xMid - SQUARE_SIDE / 2, b->yMid - SQUARE_SIDE / 2);
glVertex2i(b->xMid - SQUARE_SIDE / 2, b->yMid + SQUARE_SIDE / 2);
glVertex2i(b->xMid + SQUARE_SIDE / 2, b->yMid + SQUARE_SIDE / 2);
glVertex2i(b->xMid + SQUARE_SIDE / 2, b->yMid - SQUARE_SIDE / 2);
glEnd();
你必须从EmployeeBase
继承,所以我相信你的问题已经解决了;)
EmployeeBase
答案 1 :(得分:0)
您可以通过使EmployeeBase
成为您希望从中派生的类的protected
子类来接近这一点:
public class OuterClass
{
protected abstract class EmployeeBase { /*...*/ }
}
但是,请记住,这会阻止EmployeeBase
类型的任何属性公开为public
或internal
,因为您无法公开具有较少公开类型的对象,因为任何消费代码都不会知道对象的签名。 编辑但是,您可以按interface
或其他基本类型公开它们。
虽然您可以通过制作所有构造函数EmployeeBase
来限制internal
的继承,但是在C#中不能很好地支持限制使用类型,并且提出了很多关于您正在尝试做什么的问题。