有人能给我指点什么是最好的方法吗? this...am和classes...where混在一起放东西。
所以我跳到表单设置ApplicationEnvironment给它数据库的位置
dblocation = "xxxx"
ApplicationEnvironment appSet = new ApplicationEnvironment();
appSet.dbLocation=@"S:\Database\database.accdb";
然后设置DataAccess类
DataAccess datAcc = new DataAccess();
DataSet ds;
ds= datAcc.GetData();
所以在DataAccess类中,我想使用在ApplicationEnvironment类中设置的dbLocation .我似乎不能称之为
public DataSet GetData(){
string mydatabase = ApplicationEnvironment.dbLocation;
错误是
“非静态字段、方法或属性需要对象引用”
应该是ApplicationEnvironment.dbLocation.get吗?
有谁知道混合课程的好例子吗?
发布于 2015-07-24 12:46:44
您实际上已经接近为您的应用程序创建一个好的结构,但是有几个错误。
结构
表单不是设置应用程序其余部分的合适位置。这应该发生在主应用程序中,或者如果是一个大型企业,则在安装类中:
主要应用:设置类。设置ApplicationEnvironment。将DataAccess传递给MainForm,ApplicationEnvironment传递给DataAccess。
主表单:从DataAccess调用Getdata
ApplicationEnvironment:存储其他类可能需要的配置值.ie dbLocation (不称它们为全局变量;这些都是邪恶的东西,您没有使用它们)
DataAccess:它处理来自表单的调用以获取数据并返回,它使用dbLocation
代码
在您的设置代码中(在主应用程序中),您将向感兴趣的各方公开系统的各个方面:
ApplicationEnvironment appSet = new ApplicationEnvironment();
appSet.dbLocation=@"S:\Database\database.accdb";
DataAccess datAcc = new DataAccess(appSet);
MainForm form = new MainForm(datAcc);
...
然后,在DataAccess中,您可以执行如下操作:
Class DataAccess
{
private readonly string _dbLocation;
public DataAccess(string dbLocation)
{
_dbLocation = dbLocation;
}
public SomeType GetData()
{
// use _dbLocation to access DB
}
}
发布于 2015-07-24 11:38:25
您当前的问题可以通过两种方法中的一种解决(至少我要指出:)
创建ApplicationEnvironment实例
public DataSet GetData(){
ApplicationEnvironment ae = new ApplicationEnvironment();
string mydatabase = ae.dbLocation;
使ApplicationEnvironment及其成员保持静态
public static class ApplicationEnvironment
{
public static string dbLocation = @"S:\Database\database.accdb";
}
静态时,您现有的调用
public DataSet GetData(){
string mydatabase = ApplicationEnvironment.dbLocation;
会起作用的。
关于静态类/方法的一些信息:https://msdn.microsoft.com/en-us/library/79b3xss3.aspx
错误:
“非静态字段、方法或属性需要对象引用”
基本上,这意味着您必须实例化ApplicationEnvironment
的一个对象来访问它的内部工作。静态类/方法没有这个限制,可以直接调用- have their own set of issues.
https://stackoverflow.com/questions/31609401
复制相似问题