如何在不在C#中创建对象的情况下在另一个类中使用非静态方法

时间:2014-10-08 14:35:16

标签: c# class methods

我最近改变了我的项目,包括一个更好的集成界面。我真的坚持如何从我的类继承我的接口的一个表单(用于更新表单控件)访问一个方法。下面是一些代码片段,应该有助于清晰。

 //this is the double click event from where i have to call SelectDeal method

   private void TodayEventsGridView_DoubleClick(object sender, EventArgs e)

    {
        DealModule _dealModule = new DealModule();

        // i dont want to create an obect of class DealModule()
        try
        {
            this.Cursor = Cursors.WaitCursor;
            _dealModule.SelectDeal(DealKey);

        }
        catch (Exception ex)
        {
            MessageBox.Show("Warning: " + this.ToString() + " " + System.Reflection.MethodInfo.GetCurrentMethod().Name + "\n" + ex.Message, ex.GetType().ToString());
        }
        finally
        {
            this.Cursor = Cursors.Default;
        }
    }

2 个答案:

答案 0 :(得分:6)

根据定义,这是不可能的。只有拥有要使用的类的实例时,才能使用实例(非静态)方法。您需要使用类的实例,或将方法声明为静态。

正如帕特里克在下面所说,你试图这样做的事实可能表明存在设计缺陷,但如果没有更多的背景,很难建议如何改进它。

我想补充一点,在一般情况下,从设计的角度来看,最好是调用类的实例(或者更好的是接口),而不是静态方法。这提高了可测试性并帮助您实现松耦合,使您的软件更易于维护。为什么你认为在你的情况下调用静态方法更合适?

答案 1 :(得分:1)

如果您想在没有[{1}}实例的情况下访问SelectDeal,则需要将DealModule标记为SelectDeal

E.g:

static

如果方法未标记public class DealModule { // other code public static void SelectDeal(Key dealKey) ( /* ... */ } } ,则无法在没有实例的情况下访问该方法 但是,由于您无法在界面中使用static方法,因此您可能需要使用以下方法解决此问题:一个singelton:

static

然后

public class DealModule
{
    private static DealModule instance = null;
    public static DealModule Instance
    {
        get
        {
            if (instance == null)
                instance = new DealModule();
            return instance;
        }
    }
    // other code

    public void SelectDeal(Key dealKey) ( /* ... */ }
}