有没有办法覆盖Shape类上的ToString()方法,而不继承它并在继承的类中执行它?所以每当我调用任何形状'到字符串方法时,我都会得到覆盖的那个?
注意我不想这样: Shpae1:形状 覆盖....
我之所以不这样做,是因为我的项目已有很多形状,椭圆形,矩形等(通用的)。我想打印每个形状的位置,我知道我可以将一个形状作为一个arg单独的函数,但我已经有一些代码使用了一个形状的字符串,所以我认为它会更优雅,如果我可以改变toString方法,所以我不必更改任何代码。
答案 0 :(得分:2)
我不认为这是可能的(也可能有一些涉及动态代码生成的脏反射技巧等。)
扩展像Shape
这样的现有类的主要方法是:
Rectangle
,Ellipse
等。Shape
,Rectangle
等作为部分类。ToString()
中提供了System.Object
,每个类都继承自Shape
,因此技术上Rectangle
,ToString()
等都有string GetStringInfo(Shape s)
方法,即使它们没有自己覆盖它们。所以我会考虑两个选项之一:
Shape
,它接受ToString()
并返回字符串,然后在Shape
上使用string GetStringInfo()
的任何地方使用此函数。< / LI>
Shape
类型上创建一个扩展方法ToString()
并重构代码以使用此方法代替{{1}} 如果有人知道另一个有效的解决方案,我也会对此感兴趣。
答案 1 :(得分:0)
没有;你不能这样做。
相反,您应该使用DataTemplate。
答案 2 :(得分:0)
您始终可以将Shape用作类的内部字段,并在ToString()方法中调用_shape.ToString()。