有人可以指导我一点点最好的方法吗...我的课程变得混乱......在哪里放东西。
所以我跳转到表单设置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?
任何人都知道混合课程的任何好例子吗?
答案 0 :(得分:1)
您的直接问题可以通过以下两种方式之一解决(至少我会说出名称:)。
创建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
的对象才能访问它的内部工作。静态类/方法没有此限制,可以直接调用 - though they can have their own set of issues.
答案 1 :(得分:1)
你真的很接近为你的应用程序创建一个好的结构,但有几个错误
表单不是设置应用程序其余部分的正确位置。这应该发生在主应用程序中,或者如果是一个大型企业,在安装程序类中:
主要应用程序:设置类。设置ApplicationEnvironment。将DataAccess传递给MainForm和ApplicationEnvironment到DataAccess。
主窗体:从DataAccess调用Getdata
ApplicationEnvironment:存储其他类可能需要的配置值...即dbLocation(不要将它们称为全局变量;这些是邪恶的东西,你不是在使用它们)
DataAccess:它处理来自form的调用以获取数据并返回,它使用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
}
}