![](/img/trans.png)
[英]How to run non static method from static inside single class and use dependency injection 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
实例的情况下访问SelectDeal
, DealModule
需要将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.