我的课程需要其他信息才能正确输出其状态,因此我添加了一个自定义的PrintSelf方法,并采用了相应的参数。
但是,我担心在我的大型项目中仍然会调用ToString,而这些调用并没有被新方法取代。如何找到对ToString的不正确调用?
我使用VS 2015,但它似乎没有这种能力。
在ToString中抛出异常是一种显而易见的方式,但我不想这样做有两个原因:
ToString仍然可以执行不同的作业并输出不依赖于添加的参数的内容。
无法获得完整的代码覆盖率,这意味着它只会找到一些隐式调用的实例,但不会(可靠地)找到所有这些实例。
答案 0 :(得分:4)
要覆盖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();
}
答案 1 :(得分:1)
您可以使用Obsolete Attribute:
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开发者,如果需要,可随意更正。)