C#中如何使用单独的.cs文件?论坛;我是新手,正在写一些代码。我想知道使用包含其他类和函数的单独.cs文件的最佳方法。作为基本功能的示例,您想要单击清除按钮并清除表单上的所有字段。代码分为三个.cs文件。Main.cs、MainForm.Designer.cs和btClear.cs。MainForm.Designer.cs包含设计器自动创建的代码,包括清除按钮和我要清除的文本框。我希望代码清除btClear.cs中包含的文本框。我知道将此代码简单地放在MainForm.Designer.cs中会很容易,但我想将其用作模板,以便将单独的.cs文件用作标准做法。有人可以给我一个如何做到这一点的例子吗?大多数.net程序员这样做的方式是:我总是停留在事件处理程序方法(当双击按钮时生成VS)代码更改鼠标光标(如果我调用的代码需要几秒钟或更长时间才能运行)并捕获所有未处理的异常并将我的逻辑放在一个单独的私有方法中:partialclassMainForm:Form//thisisMainForm.cs{//这是双击按钮时VS生成的方法privatevoidclearButton_Click(objectsender,EventArgse){this.Cursor=Cursors.WaitCursor;试试{ClearForm();}catch(Exceptionex){//...这里有代码将异常记录到文件中//和/或向用户显示消息框}finally{this.Cursor=Cursors.Default;}}privatevoidClearForm(){//在这里清除所有控件myTextBox.Clear();myComboBox.SelectedIndex=0;//等等..}}在我看来,如果你想用传统的.net方式做事,你应该坚持第一个例子。当代码不是表单逻辑的一部分(例如,数据访问代码或业务逻辑)时,建议将代码移出form.cs文件。在这种情况下,我认为清除表单控件是不符合业务逻辑的。它只是表单代码的一部分,应该保留在MainForm.cs中。但是如果你真的想把ClearForm方法放在另一个.cs文件中,你可以创建一个新类并将ClearForm方法移到那里。您还需要将每个控件的Modifiers属性更改为Public,以便您的新类可以从MainForm外部访问它们。像这样:publicclassFormCleaner//这是FormCleaner.cs{publicvoidClearForm(MainFormform){//在这里清除所有控件form.myTextBox.Clear();form.myComboBox.SelectedIndex=0;//etc...}}您必须将主窗体代码更改为:partialclassMainForm:Form//thisisMainForm.cs{//这是当您双击按钮时VS生成的方法privatevoidclearButton_Click(对象发送者,EventArgse){this.Cursor=Cursors.WaitCursor;尝试{FormCleaner清洁器=newFormCleaner();cleaner.ClearForm(这个);}catch(Exceptionex){//...这里有代码将异常记录到文件中//和/或向用户显示消息框}finally{this.Cursor=Cursors.Default;但是请注意,您的FormCleaner类必须知道您的MainForm类才能知道如何清除表单的每个控件,或者您需要想出一个能够遍历Controls集合的通用算法。清理它们的任何形式:publicclassFormCleaner//thisisFormCleaner.cs{//'generic'formcleanerpublicvoidClearForm(Formform){foreach(Controlcontrolonform.Controls){//这可能无法正常工作,因为//像Labels这样的静态控件也会删除它们的文本。control.Text="";正如其他人所说,MainForm.Designer.cs是机器生成的,你不应该把你自己的代码放在那里。您可以对MainForm类使用分部类,因为它已经在MainForm.cs和MainForm.Designer.cs中。btnClear.cspublicpartialclassMainForm{privatevoidclearForm(objectsender,EventArgse){//...}}并在MainForm.cs或MainForm.Designer.cs中注册事件this.btnClear.click+=clearForm;编辑:如果你想要一个通用的方法,你可以将控件的Tag属性设置为默认值。使用扩展方法,您可以执行类似formGroup.Reset();的操作。使用System.Windows.Forms;publicclassControlExtensions{publicvoidReset(thisControlcontrol){if(control.Tag!=null){if(controlisTextBoxBase&&control.Tagisstring){control.Text=control.Tagasstring;}elseif(controlisCheckBox&&control.Tagisbool){control.Checked=control.Tagasbool;}//etc}foreach(Controlchildincontrol.Children)child.Reset();每个.cs文件一个类是一个很好的规则。我不会将特定于页面的功能分离到单独的.cs文件中,除非您打算封装到可重用的类中。编辑:将清除功能放在按钮的OnClick事件中。没有理由将其分开。.aspx文件:UntitledPage.cs文件使用系统;命名空间SimpleWebTest{publicpartialclass_Default:System.Web.UI.Page{protectedvoidPage_Load(objectsender,EventArgse){}protectedvoidClearButton_Click(objectsender,EventArgse){using(ComplexOperationThingycot=newComplexOperationThingy()){cot.DoSomethingComplex();}}}}ComplexOperationThingy.cs:使用系统;namespaceSimpleWebTest{publicclassComplexOperationThingy{ComplexOperationThingy(){}publicvoidDoSomething(//DoSomething){你的复杂操作。}}}这很简单。在你的btClear.cs文件中,只需生成一个类定义,如:publicclassMyUtility{publicstaticvoidClearContents(IEnumerablecontrols){//TODO:Codethatclearscontentsofcontrolspassed}}然后,你可以通过以下方式调用它来自包含生成类的命名空间中的任何位置:MyUtility.ClearContents(SomeControlCollection);我希望我没有完全错过你的意图。通常,不应将代码放在MainForm.designer.cs文件中。VisualStudio使用*.designer.cs文件连接所有繁重的管道,以便在窗体上实际放置控件。任何要用于与窗体上的控件进行交互的代码都应位于MainForm.cs文件中。所以如果你想让函数清除窗体上的控件,那么你应该把你的代码放在那里。如果您为清除窗体上的控件而编写的代码可以在其他项目中重复使用,那么您应该将它放在另一个可以链接到其他项目的.cs文件中。正如Chris所说,通常也为每个.cs文件放置一个类是个好主意。执行此操作时,文件应具有它包含的类的名称。因此,如果您有一个名为MyButtonHelpers的类,则源文件应命名为MyButtonHelpers.cs。我发现最好不要直接编辑.Designer.cs文件,尤其是从源代码控制的角度来看。您可以使用部分类来包含相关代码;在这种情况下,您可以使用MainForm.Designer.cs作为部分类如何完成的示例(例如,部分类MainForm{})。如果您通过Windows窗体设计器添加事件处理程序,它应该自动将它们放入MainForm.cs,而不是MainForm.Designer.cs。如果项目增长到相当大的规模,我经常发现创建多个部分类文件很有用,每个主要功能组一个。这使得查找特定功能(和相关功能)变得更加容易。C#(和许多其他语言)中的约定是每个类一个文件(通常每个文件一个类)。当然,这条规则也有例外,但将单个类拆分到多个文件应该很少见,而不是标准做法。您在评论中提到,您可以预见比您提供的示例更多的“复杂操作”。你想要什么样的动作?只要你只是在谈论处理表单控件,逻辑就属于表单的.cs文件(在这种情况下是MainForm.cs,而不是MainForm.designer.cs-正如其他人所说,你永远不应该修改.cs文件。设计器文件)。如果您的表单过于复杂,将其分解为单独的自定义控件可能是有意义的。这将使您的源文件保持较小,但是(因为每个控件都映射到一个类)您将遵守一个类一个文件的约定。以上是C#学习教程:如何在C#中使用单独的.cs文件?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
