程序结构......迷路了

时间:2015-07-24 11:28:27

标签: c# class

有人可以指导我一点点最好的方法吗...我的课程变得混乱......在哪里放东西。

  • 主窗体:设置类并将dblocation传递给ApplicationEnvironment,从DataAccess调用Getdata
  • ApplicationEnvironment :存储其他类可能需要的全局变量...即dbLocation
  • DataAccess :它处理来自表单的调用以获取数据并返回,它使用dbLocation

所以我跳转到表单设置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?

任何人都知道混合课程的任何好例子吗?

2 个答案:

答案 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
    }
}