我最近改变了我的项目,包括一个更好的集成界面。我真的坚持如何从我的类继承我的接口的一个表单(用于更新表单控件)访问一个方法。下面是一些代码片段,应该有助于清晰。
//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 :(得分: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) ( /* ... */ }
}