C# 如何在其他类中使用非静态方法而不在C中创建对象
我最近对我的项目做了一点修改,加入了一个接口,以实现更好的集成。我一直在研究如何在一个表单上访问一个方法,该方法用于从继承自接口的类中更新表单控件。下面是一些代码片段,这些代码应该有助于提高清晰度C# 如何在其他类中使用非静态方法而不在C中创建对象,c#,class,methods,C#,Class,Methods,我最近对我的项目做了一点修改,加入了一个接口,以实现更好的集成。我一直在研究如何在一个表单上访问一个方法,该方法用于从继承自接口的类中更新表单控件。下面是一些代码片段,这些代码应该有助于提高清晰度 //this is the double click event from where i have to call SelectDeal method private void TodayEventsGridView_DoubleClick(object sender, EventArgs
//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;
}
}
如果要在没有DealModule实例的情况下访问SelectDeal,则需要将SelectDeal标记为静态
例如:
如果一个方法没有标记为static,那么没有实例就无法访问它。
但是,由于接口中不能使用静态方法,因此您可能希望使用Singleton解决此问题:
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);
根据定义,这是不可能的。实例非静态方法只能在您有类的实例要处理时使用。您要么需要使用类的实例,要么将方法声明为静态 正如Patrick在下面所说的,您尝试这样做的事实可能表明存在设计缺陷,但是如果没有更多的上下文,很难建议如何改进它
我要补充的是,在一般情况下,从设计的角度来看,最好是针对类的实例或更好的接口调用,而不是静态方法。这增加了可测试性,并帮助您实现松耦合,使您的软件更易于维护。为什么您认为在您的情况下调用静态方法更可取?您不这么认为。不可能。您能详细说明一下为什么不想创建DealModule类吗?如果我们更多地了解您的约束条件,也许我们可以建议一个更好的解决方案。从技术上讲,您仍然在创建一个实例。@帕特里克霍夫曼:是的,仍然是一个实例,但每次都只有一个,而不是一个新实例……迈克,我无法创建DealModule类的实例,因为其他类正在使用DealModule的方法,DealModule包含一些值,如果我要创建一个实例,那么所有的值都将被洗掉,这是我在其他用途中需要的
DealModule.Instance.SelectDeal(DealKey);