2014-10-08 113 views
0

我最近更改了我的项目以包含一个更好的集成接口。我真的被困在如何从我的接口继承的类中访问一个表单上的方法(用于更新表单控件)。下面是一些代码片段,应该有助于清晰。如何在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; 
     } 
    } 
+0

你不知道。不可能。 – 2014-10-08 14:37:47

+0

你能否详细说明为什么你不想创建DealModule类?也许我们可以建议一个更好的解决方案,如果我们更了解你的约束。 – JMarsch 2014-10-08 14:38:55

回答

1

如果您要访问SelectDealDealModule你需要标记SelectDealstatic一个实例。

例如为:

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); 
+0

如果单身人士是一种选择,是的。从技术上讲,你还在创建一个实例。 – 2014-10-08 14:44:37

+0

@PatrickHofman:是的,仍然只有一个实例,但每个事件中只有一个实例,而不是一个实例... – ChrFin 2014-10-08 14:48:17

6

是这样的,根据定义,是不可能的。实例(非静态)方法只能在您需要使用类的实例时使用。你需要使用你的类的一个实例,或者声明这个方法是静态的。

正如帕特里克在下面说的那样,您尝试这样做的事实可能意味着一个设计缺陷,但很难建议如何在没有更多上下文的情况下对其进行改进。

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

+0

mike我无法创建类DealModule的实例,因为其他类正在使用DealModule的方法,并且DealModule包含一些值if我将创建一个实例,然后所有的价值将会冲刷出我需要的其他用途 – 2014-10-10 11:29:42

相关问题