我如何找出谁(隐式地)调用我的ToString
本文关键字:调用 我的 ToString 何找出 | 更新日期: 2023-09-27 18:09:09
我的类需要额外的信息来正确地输出它的状态,所以我添加了一个自定义PrintSelf方法,它接受适当的参数。
然而,我担心在我的大型项目中仍然有对ToString的调用,这些调用没有被新方法取代。如何查找对ToString的不当调用?
我使用的是VS 2015,但它似乎没有这个能力。
在ToString中抛出异常是一种明显的方法,但我不想这样做,有两个原因:
-
ToString仍然可以执行不同的任务并输出一些不依赖于添加参数的内容。
-
没有办法获得完整的代码覆盖,这意味着它只会发现一些隐式调用的实例,而不是(可靠地)发现所有的实例。
要覆盖ToString并记录调用者,您可以这样做
public override string ToString()
{
StackTrace stackTrace = new StackTrace();
StackFrame[] stackFrames = stackTrace.GetFrames();
StackFrame callingFrame = stackFrames[1];
MethodInfo method = callingFrame.GetMethod();
YourLogingMethod(method.DeclaringType.Name + "." + method.Name);
return base.ToString();
}
您可以使用Obsolete属性:
public class MyFirstClass
{
//true or false parameters indicates whether to throw
// a compile error (true) or warning (false)
[Obsolete("Please use the method PrintSelf() instead of ToString()", false)]
public overrides string ToString()
{
//Whatever code you want here
return "";
}
}
public class MySecondClass
{
public void Test()
{
mfc = new MyFirstClass();
mfc.ToString(); //Here you will get a compiler warning
}
}
这会让你知道在Visual Studio中对这个函数的所有调用。因为它只是一个警告,所以仍然可以使用它。
(注意:对不起,如果语法不正确,我通常是一个VB . net开发人员,如果需要,请随时纠正它。)