我如何找出谁(隐式地)调用我的ToString

本文关键字:调用 我的 ToString 何找出 | 更新日期: 2023-09-27 18:09:09

我的类需要额外的信息来正确地输出它的状态,所以我添加了一个自定义PrintSelf方法,它接受适当的参数。

然而,我担心在我的大型项目中仍然有对ToString的调用,这些调用没有被新方法取代。如何查找对ToString的不当调用?

我使用的是VS 2015,但它似乎没有这个能力。

在ToString中抛出异常是一种明显的方法,但我不想这样做,有两个原因:

  1. ToString仍然可以执行不同的任务并输出一些不依赖于添加参数的内容。

  2. 没有办法获得完整的代码覆盖,这意味着它只会发现一些隐式调用的实例,而不是(可靠地)发现所有的实例。

我如何找出谁(隐式地)调用我的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开发人员,如果需要,请随时纠正它。)