Dra*_*tar 1 c# field properties
我有一个基类,我的项目中的所有可绘制元素都使用它.它拥有一个Rectangle,它需要暴露给所有子类,因为它需要在各种情况下作为参数传入.超级直截了当:
public abstract class DrawableSurface
{
protected Rectangle m_Rect;
public Vector2 Position
{
get { return m_Rect.Location; }
set { m_Rect.Location = value; }
}
etc. ...
Run Code Online (Sandbox Code Playgroud)
Rectangle的区域,位置等通常与类的区域和位置同义,但我想强制执行所有客户端(子类的子类)必须通过类的属性与Rectangle交互的约定.换句话说,我有一个客户端可以访问的受保护类,以便它们可以将它传递给函数,但我从不希望它们执行任何直接的m_Rect.Whatever访问.
是否有一种强制执行此约定的好方法(除了文档?)
子类可以访问字段,也可以不访问 - 就像那样简单.您不能让他们访问该字段"只是为了将值直接作为参数传递给另一个方法".
我个人认为它是私有领域,但暴露受保护的财产:
// Make it readonly if possible...
private Rectangle m_rect;
// Only expose a setter if you need it.
protected Rectangle { get { return m_rect; } }
Run Code Online (Sandbox Code Playgroud)
如果你能多谈谈其中矩形需要作为方法的参数的情况下,我们可能能够进一步帮助...但你必须接受至少具有读取访问子类之间的根本选择Rectangle参考或不 - 没有中间立场.
除了其他任何东西,如果你可以让他们访问Rectanglejust以将其传递给另一个方法,那么阻止他们编写如下代码:
public void DoSomething()
{
SneakyMethodWithRectangle(RectangleJustForPassing);
}
private void SneakyMethodWithRectangle(Rectangle rectangle)
{
// Ha ha! I have access to the rectangle!
}
Run Code Online (Sandbox Code Playgroud)