C# 覆盖方法、属性等还有多远。。。一个基类的,例如净树节点类
我正在开发一个应用程序,它使用TreeView控件来表示业务对象。目前,业务对象和TreeNode之间的链接是通过TreeNode的Tag属性维护的。我对此不是很满意,因为我认为这个联系不够紧密。例如,可能存在一个没有业务对象的TreeNode对象,我还想根据业务对象的状态更新TreeNode映像。因此,我从TreeNode派生了自己的特殊TreeNode类:C# 覆盖方法、属性等还有多远。。。一个基类的,例如净树节点类,c#,.net,treeview,overriding,C#,.net,Treeview,Overriding,我正在开发一个应用程序,它使用TreeView控件来表示业务对象。目前,业务对象和TreeNode之间的链接是通过TreeNode的Tag属性维护的。我对此不是很满意,因为我认为这个联系不够紧密。例如,可能存在一个没有业务对象的TreeNode对象,我还想根据业务对象的状态更新TreeNode映像。因此,我从TreeNode派生了自己的特殊TreeNode类: class ActionTreeNode : TreeNode { private Action mAction;
class ActionTreeNode : TreeNode
{
private Action mAction;
public Action Action
{ get ... }
public ActionTreeNode(Action action)
: base()
{
if (action == null) throw new ArgumentNullException("action", "Paramter action must not be null.");
mAction = action;
}
public void UpdateState()
{
switch (mAction.ActionState)
{
case ActionState.Passed:
SelectedImageIndex = 3;
ImageIndex = 3;
break;
case ActionState.Failed:
SelectedImageIndex = 2;
ImageIndex = 2;
break;
...
}
return;
}
}
使用这种最小的方法,每次调用返回TreeNode对象(如“(ActionTreeNode)myNode.Parent”中的基类的属性或方法时,我都必须强制转换。解决方案是重写每个方法或属性,并返回ActionTreeNode类型的对象。
您认为,采用最小方法更合适吗?还是您会努力重新实现所有方法、属性以避免强制转换?谢谢。我喜欢最简单的方法。如果您担心代码会被大量的cast语句弄乱,只需在一个地方创建一个方法即可:
private ActionTreeNode GetParent(ActionTreeNode node)
{
return node.Parent as ActionTreeNode;
}
// in some method:
ActionTreeNode parent = GetParent(someNode);
if (parent != null)
{
// the parent is an ActionTreeNode
}
不过,不要忘记对返回值进行null检查,如果父节点不是ActionTreeNode…我想问题是,要花多长时间才能使其强类型化 权衡一下使每个符号“紧凑”的成本,以及您和其他开发人员拥有一个坚实平台的成本
在不了解更多信息的情况下,我个人认为我会强烈地键入它,因为这也意味着对业务逻辑的任何更改(例如存储在树中的不同类型)都将导致编译失败,而不是可能的未知错误。我也喜欢此版本。可能还应该重写以字符串作为参数的ActionTreeNode构造函数。