微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

何时在C#中使用Classes?

我对C#语言比较陌生,但是在谷歌搜索和Stack Overflow的帮助下我已经完成了许多应用程序,包括使用Office,系统服务,进程,WMI,sql,Linq和Active Directory. ..

虽然尽管在使这些应用程序正常运行方面取得了成功,但我仍然不确定C#语言中的许多内容,例如良好的代码实践和使用许多关键字等.

C#类;我知道我可以用它们做什么,我知道构造函数和析构函数,实例化和属性,但我不确定何时应该使用它们.到目前为止,我已将我的所有代码写入Form1.cs文件中的不同方法中.这些方法使用完全不同的API执行各种不同的操作.这显然意味着尝试维护代码变得非常困难,而且我发现在Form1.cs中找到任何内容会越来越令人沮丧.

我的问题是,我应该将我的代码分成不同的类吗?我试图将与sqlConnection和sqlCommands相关的东西拆分成一个单独的类,但是在我的Form1.cs中没有多次实例化同一个类,我看不出这更容易或任何好处.

我一直试图将一个新的应用程序拼凑在一起,但这次将功能保留在它自己的类中,我希望有人可以告诉我,我是愚蠢的,做错了或者至少给了我一些指导.

此应用程序最终将从App.Config加载我的连接字符串,连接到sql数据库并使用数据库中的多个表填充DataSet.这绝不是功能性的,因为我无法理解整个Classes问题.

非常感谢 :)

partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    string myConnectionString;

    private void Form1_Load(object sender,System.EventArgs e)
    {
        AppConfig cfg = new AppConfig();
        if (cfg.loadConfig())
        {
            myConnectionString = cfg.myConnectionString();
        }

        if (!String.IsNullOrEmpty(myConnectionString))
        {
            sqlConn sql = new sqlConn();
            if (sql.createConnection(myConnectionString))
            {
                MessageBox.Show("Connected!");
            }
        }
    }
}

class myDataSet
{
    DataSet DataSet()
    {
        DataSet ds = new DataSet();

        sqlConn sql = new sqlConn();

        return ds;
    }

    public void fillData()
    {
        try
        {
            sqlCommand sqlCmd = new sqlCommand("SELECT * FROM hardware");                
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        }
    }
}

class sqlConn : Idisposable
{
    sqlConnection sqlConn;
    public bool createConnection(string myConnectionString)
    {
        sqlConn = new sqlConnection();
        sqlConn.ConnectionString = myConnectionString;
        try
        {
            sqlConn.open();
            return true;
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        }
        return false;
    }

    public void dispose()
    {
        if (sqlConn.State == ConnectionState.Open)
        {
            sqlConn.Close();
            sqlConn.dispose();
        }
    }
}

class AppConfig
{
    Configuration cfg;

    public bool loadConfig()
    {
        try
        {
            cfg = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
            if (!File.Exists(cfg.FilePath))
            {
                MessageBox.Show("No configuration file");
            }
            return true;
        }
        catch(Exception ex)
        {
            MessageBox.Show(ex.Message);
        }
        return false;
    }

    public string myConnectionString()
    {
        string connectionString = ConfigurationManager.ConnectionStrings["IT_ProjectConnectionString"].ConnectionString;
        return connectionString;
    }
}

解决方法

OOP背后的原理或多或少地说你应该尽可能地分解内容,以便相关的东西在他们自己的类中组合在一起,就像你的例子中的sql东西一样.另一个经常使用的例子是汽车的例子 – 如果你需要处理汽车的数据,你可以制作一个包含相关变量的汽车类,如最高速度,名称,颜色和适当的方法,例如驾驶(双倍距离)或类似的东西.

如果您不想要该类的不同对象并且在多个点上需要相同的行为,则可以通过多种方式阻止多个实例:如果所有点都在您的Form1中,您只需要将类作为类成员实例化一次,你可以在整个Form1类中使用它.如果您需要从不同的类访问它,您可以拥有一个全局变量(大多数人认为这是不好的做法)或者使您需要访问静态类 – 这样,您根本不需要实例化它.

如果你的应用程序非常小,你可能会把它全部放在你的Form1类中,但正如你自己注意到的那样,它会很快变得混乱和混乱.将类视为对代码进行排序的机会.想想与什么相关的东西,以及你期望在一起找到什么,并将这些东西放在课堂上.如果你坚持这一点,你最终得到的代码不那么令人沮丧,找到代码并且具有清晰和逻辑的结构.一旦事情变得更复杂,你就可以利用继承之类的东西,你可以重用那些在不同的应用程序中可能需要的东西(例如,数据库的东西).

这是一个非常简短和非常粗略的描述.我自己都不知道有关这个主题的好书(除了那些适合全程编程的初学者,这在这里似乎不合适),但我建议在OOP上找一个或者在那个主题上寻找好的介绍文章.就个人而言,我发现CodeProject是一个很好的文章来源. Here is one on OOP.

原文地址:https://www.jb51.cc/csharp/91937.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐