.net 重写ToString()
有没有一种方法可以重写Shape类上的ToString()方法,而不必继承它并在继承的类中执行它?所以,每当我调用任何一个shape'to string方法时,我都会得到一个覆盖的方法 注意:我不想这样: Shpae1:形状 覆盖 我不想这样做的原因是,我的项目中已经有很多形状,椭圆、矩形等(通用的)。我想打印每个形状的位置,我知道我可以将一个形状作为arg的单独函数,但是我已经有一些代码使用形状的to字符串,所以我认为如果我可以更改toString方法,那么我就不必更改任何代码,这会更优雅 No;你不能那样做.net 重写ToString(),.net,wpf,overriding,.net,Wpf,Overriding,有没有一种方法可以重写Shape类上的ToString()方法,而不必继承它并在继承的类中执行它?所以,每当我调用任何一个shape'to string方法时,我都会得到一个覆盖的方法 注意:我不想这样: Shpae1:形状 覆盖 我不想这样做的原因是,我的项目中已经有很多形状,椭圆、矩形等(通用的)。我想打印每个形状的位置,我知道我可以将一个形状作为arg的单独函数,但是我已经有一些代码使用形状的to字符串,所以我认为如果我可以更改toString方法,那么我就不必更改任何代码,这会更优雅 N
相反,您可能应该使用DataTemplate。您可以始终使用Shape作为类的内部字段,并在ToString()方法调用中使用_Shape.ToString()。我认为这是不可能的(也可能存在一些涉及动态代码生成等的肮脏反射技巧) 扩展现有类(如
Shape
)的主要方法有:
矩形
、椭圆
等形状
、矩形
等作为分部类提供ToString()
是在每个类继承的System.Object
中提供的,因此从技术上讲Shape
,Rectangle
等都有一个ToString()
方法,即使它们本身没有重写它们- 在实用程序类中创建一个静态方法
,该实用程序类接受string GetStringInfo(Shape s)
并返回字符串,然后在Shape
上使用Shape
的任何地方使用此函数ToString()
- 要最小化重构,请在type
上创建扩展方法Shape
,并重构代码以使用此方法,而不是string GetStringInfo()
ToString()
如果有人知道另一个可行的解决方案,我也会对此感兴趣 似乎OP删除了WPF标签。@Petarepac:事实上,我删除了,因为它与问题无关。你认为我应该把它放回去吗?我认为Slakses的答案在WPF上下文中。@SLaks我明白你对数据模板所说的。@SLaks:Middle:),这个数据模板是WPF的东西?如果是这样,您在WPF上下文中进行了回答,然后删除了WPF标记?您能提供更多详细信息吗?是否要使用Shape.ToString()而不从Shape继承?若有,为什么?OP说这个问题不是WPF特有的。现在怎么办?@petarepac:不;OP没有这么说。@Petar:如果你想知道是谁改变了什么,你只需点击查看修订。实际上Slaks删除了WPF标记并再次添加;)@PetarRepac I添加了上述解释。这与继承Shape并重写ToString()相同。不,它不是。如果从Shape继承,则类将发布Shape拥有的所有公共成员。你不能隐藏它们。如果类中包含Shape实例,则可以选择希望类的客户端可以访问的成员。例如,如果Shape有Draw()方法,则类可以隐藏此方法。这是一个控件。你认为不继承控制权,而是将它们作为私有字段保留是一种好的做法吗?不,我不这么认为。但是我回答了一个问题“有没有一种方法可以在不继承Shape类的情况下重写它的ToString()方法…”。当时WPF标签不存在,我认为问题在于继承。第二个要点似乎是最优雅的解决方案