虽然尽管在使这些应用程序正常运行方面取得了成功,但我仍然不确定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; } }
解决方法
如果您不想要该类的不同对象并且在多个点上需要相同的行为,则可以通过多种方式阻止多个实例:如果所有点都在您的Form1中,您只需要将类作为类成员实例化一次,你可以在整个Form1类中使用它.如果您需要从不同的类访问它,您可以拥有一个@R_502_398@(大多数人认为这是不好的做法)或者使您需要访问静态类 – 这样,您根本不需要实例化它.
如果你的应用程序非常小,你可能会把它全部放在你的Form1类中,但正如你自己注意到的那样,它会很快变得混乱和混乱.将类视为对代码进行排序的机会.想想与什么相关的东西,以及你期望在一起找到什么,并将这些东西放在课堂上.如果你坚持这一点,你最终得到的代码不那么令人沮丧,找到代码并且具有清晰和逻辑的结构.一旦事情变得更复杂,你就可以利用继承之类的东西,你可以重用那些在不同的应用程序中可能需要的东西(例如,数据库的东西).
这是一个非常简短和非常粗略的描述.我自己都不知道有关这个主题的好书(除了那些适合全程编程的初学者,这在这里似乎不合适),但我建议在OOP上找一个或者在那个主题上寻找好的介绍文章.就个人而言,我发现CodeProject是一个很好的文章来源. Here is one on OOP.