繁体   English   中英

如何在其他类中使用非静态方法而不在C#中创建对象

[英]how to use non static method inside other class without creating object in C#

最近,我对项目进行了一些更改,以包含用于更好集成的界面。 我真的对如何从我的类继承的类中访问一种窗体(用于更新窗体控件)的方法一无所知。 以下是一些有助于简化说明的代码片段。

 //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;
        }
    }

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

正如帕特里克(Patrick)在下面说的那样,您尝试执行此操作的事实可能表明存在设计缺陷,但是很难在没有更多上下文的情况下提出如何改进它的建议。

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

如果要在没有DealModule实例的情况下访问SelectDealDealModule需要将SelectDeal标记为static

例如:

public class DealModule
{
    // other code

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

如果某个方法未标记为static ,则没有实例就无法访问它。
但是,由于接口中没有static方法,因此您可能需要使用singelton来解决此问题:

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) ( /* ... */ }
}

接着

DealModule.Instance.SelectDeal(DealKey);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM