为类中的方法生成编译警告的属性

时间:2013-04-25 09:11:08

标签: c# .net

我有一个类,我使用单例模式。该课程看起来像

public class MessageAccess
{
    private static MessageAccess instance;
    public static MessageAccess Instance
    {
        get { return instance ?? (instance = new MessageAccess()); }
    }

    private MessageAccess()
    {

    }

    public void Initialize(string data)
    {
        //...
        isInitialized = true;
    }

    private bool isInitialized;

    public void ReadData1()
    {
        // This Method can always be called
    }

    public void ReadData2()
    {
        // This Method can only be called, if Initialize was called. Otherwise an exception will be thrown
    }
}       

如果从不调用方法Initialize

,是否可以生成编译器警告

2 个答案:

答案 0 :(得分:2)

虽然我理解你的观点,但我不认为这样的警告会像你想象的那样方便。我担心.NET框架不能满足这种类型的警告,原因有两个明确的原因(请参阅此链接:http://blogs.msdn.com/b/csharpfaq/archive/2004/03/19/why-doesn-t-c-warn-about-unused-methods.aspx)。

有人可能认为缺少此功能是错失的机会,但事实并非如此。你的班级MessageAccess是公开的,将被编译成(比方说)一个dll。即使您在编译dll时遇到此警告,在使用该dll的Initialize方法(也是公共的)编译某些外部代码时,您也不希望它出现。你基本上不能保证没有其他代码会使用该方法,这是没有这个警告的更好理由之一。

答案 1 :(得分:1)

如果未在装配体外部使用该类,则可以将其设为internal。在这种情况下,如果未调用该方法,代码分析将生成警告“避免未调用的私有代码”。