限制在c#中的另一个类中使用类作为类型

时间:2016-12-25 15:54:36

标签: c# oop

我有一个班级

abstract class EmployeeBase
{
}

我希望这个EmployeeBase不应该在我的任何其他类中用作属性。只有派生自EmployeeBase的类才能用于在任何其他类中声明属性。是否有可能实现这一目标?如果是这样,怎么样?

2 个答案:

答案 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类型的任何属性公开为publicinternal,因为您无法公开具有较少公开类型的对象,因为任何消费代码都不会知道对象的签名。 编辑但是,您可以按interface或其他基本类型公开它们。

虽然您可以通过制作所有构造函数EmployeeBase来限制internal的继承,但是在C#中不能很好地支持限制使用类型,并且提出了很多关于您正在尝试做什么的问题。