也适用于C,类的反射实例

原文:

C# 是八个轻便易行的、现代的、通用的、面向对象的编程语言,它是由微软(Microsoft卡塔尔开垦的。
C# 是 .Net 框架的一片段,且用于编写 .Net 应用程序。
.Net 框架应用程序是多平台的应用程序。
框架的兼顾方法使它适用于下列各类语言:C#、C 、Visual Basic、Jscript、COBOL 等等。
C#的性状共有六点


缓和方案、项目、类之间的涉及:

Class1和Form 窗体在同三个命名空间

1.简单
2.面前境遇对象
3.类型安全
4.与web紧凑结合
5.基于.NET Frameword
6.支撑跨平台。

 

  三个技术方案能够富含五个门类、八个项目得以分包四个类

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Text;
 4 namespace fanshetest1
 5 {
 6     class Class1
 7     {
 8         private string ab="1";
 9         public Class1(string aa)
10         {
11             a = aa;
12         }
13         public int  aa(int x,int y)
14         {
15             return x y x y;
16         }
17         public string bb()
18         {
19             return "bb";
20         }
21         public static string cc()
22         {
23             return "cc";
24         }
25         public string AB
26         {
27             get
28             {
29                 return ab;
30             }
31             set
32             {
33                 ab = value;
34             }
35         }
36         public string a;
37     }
38 }

一个 C# 程序重要回顾以下部分:

 

  建设方案:集团  项目:部门  类:工作者

 

取名空间表明(Namespace declaration卡塔 尔(阿拉伯语:قطر‎
一个 class
Class 方法
Class 属性
一个 Main 方法
语句(Statements)& 表达式(Expressions)
注释

在开垦中保持突出的编码标准是拾壹分首要的。新的VB.net编码规范,是风度翩翩种被注明能鲜明更正代码可读性,并推动代码处理、分类的编码标准。接受这种编码典型,能幸免如匈牙利(Hungary卡塔 尔(英语:State of Qatar)命名法带给的繁长前缀,便于回想变量的用场。上边包车型地铁牵线这种编码标准。

  .sln:建设方案文件,里面含有着漫天应用方案的消息,能够双击运转。

Class1和Form 窗体在差别叁个命名空间

下一场,大家上学了
窗体的宏图

也适用于C,类的反射实例。少年老成、类型级单位的命名

  .csproj:里面含有着这几个类型的音信,能够双击运行。

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Text;
 4 namespace fanshetest1
 5 {
 6     class Class1
 7     {
 8         private string ab="1";
 9         public Class1(string aa)
10         {
11             a = aa;
12         }
13         public int  aa(int x,int y)
14         {
15             return x y x y;
16         }
17         public string bb()
18         {
19             return "bb";
20         }
21         public static string cc()
22         {
23             return "cc";
24         }
25         public string AB
26         {
27             get
28             {
29                 return ab;
30             }
31             set
32             {
33                 ab = value;
34             }
35         }
36         public string a;
37     }
38 }

如何创建空白Windows窗体
安装窗体属性
安装窗体的背景:backgroundimage属性
怎样加多新的窗体并提到

Form2 newfor = new Form2();
newfor.Show();
this.Hide();

改换窗体标题名称

this.Text = "窗体标题";
点窗体,在品质框中找到Text属性改过
。。。。。。

1、类。

取名空间(namespace):

 

各个控件的安装

以Class评释的类,都一定要以名词或名词短语命名,彰显类的效劳。如:

  能够接收using关键字引进系统预约义的命名空间和顾客自定义的命名空间。

上边是何许使用反射操作以上类;

textbox:

安装文本长度:马克斯Lenth
蒙蔽输入字体:passwordchar
。。。。。。

comboBox:

下拉菜单:DropDownList
。。。。。。

等等

Class Indicator

  能够使用namespace关键字自定义三个命名空间。

  1 using System;
  2 using System.Collections.Generic;
  3 using System.ComponentModel;
  4 using System.Data;
  5 using System.Drawing;
  6 using System.Text;
  7 using System.Windows.Forms;
  8 using System.Reflection;
  9 namespace fanshetest
 10 {
 11     public partial class Form1 : Form
 12     {
 13         System.Reflection.Assembly a;
 14         System.Reflection.Assembly b;
 15         public Form1()
 16         {
 17             InitializeComponent();
 18             a = System.Reflection.Assembly.LoadFrom("Class1.DLL");
 19         }
 20         private void button1_Click(object sender, EventArgs e)
 21         {
 22             gouzaohanshu();
 23            
 24         }
 25        //没有传参数,返回一个类型;
 26         private void One()
 27         {
 28             //再另建一个项目,在项目中引用上面生成的ClassLibrary1.DLL
 29             System.Type t = a.GetType("Class1.Class1");
 30             //动态生成ClassLibrary1.Class类的实例
 31             Object theObj = System.Activator.CreateInstance(t);
 32             //参数信息,GetSum需要两个string参数
 33             System.Type[] paramTypes = new System.Type[2];
 34             paramTypes[0] = System.Type.GetType("System.String");
 35             paramTypes[1] = System.Type.GetType("System.String");
 36             //System.Reflection.MethodInfo mi = t.GetMethod("aa", paramTypes);
 37             System.Reflection.MethodInfo mi = t.GetMethod("bb");
 38             //参数值
 39             Object[] parameters = new Object[2];
 40             parameters[0] = 3;
 41             parameters[1] = 4;
 42             Object returnValue = mi.Invoke(theObj, null);
 43             this.textBox1.Text = returnValue.ToString();
 44         }
 45         //没有返回值,调用的是直接执行函数
 46         private void None_void()
 47         {
 48             //再另建一个项目,在项目中引用上面生成的ClassLibrary1.DLL
 49             System.Type t = a.GetType("Class1.Class2");
 50             //动态生成ClassLibrary1.Class类的实例
 51             Object theObj = System.Activator.CreateInstance(t);
 52             //参数信息,GetSum需要两个string参数
 53             System.Type[] paramTypes = new System.Type[2];
 54             //此处调用方法,如果有参数只需要在括号的后面加上"," 加上参数的type[]类型的参数
 55             System.Reflection.MethodInfo mi = t.GetMethod("Mes");
 56             Object returnValue = mi.Invoke(theObj, null);
 57         }
 58         //没有返回值,传出参数接收返回值;
 59         private void Two()
 60         {
 61             Type t = a.GetType("Class1.Class1");
 62             Object theObj = Activator.CreateInstance(t);
 63             Type[] types=new Type[2];
 64             types[0]=Type.GetType("System.Int32");
 65             types[1]=Type.GetType("System.Int32");
 66             Object[] obj=new Object[2];
 67             obj[0]=2;
 68             obj[1]=3;
 69             MethodInfo mi = t.GetMethod("aa",types);
 70            Object returnValue=mi.Invoke(theObj,obj);
 71            this.textBox1.Text = returnValue.ToString();
 72         }
 73         //获取同一个命名空间的反射出值
 74         private void Local()
 75         {
 76             Type t=Type.GetType("fanshetest1.Class1");
 77             //创建一个 实例
 78             Object theObj = Activator.CreateInstance(t);
 79             Type[] types=new Type[2];
 80             types[0]=Type.GetType("System.Int32");
 81             types[1] = Type.GetType("System.Int32");
 82             Object[] obj = new Object[2];
 83             obj[0] = 2;
 84             obj[1] = 3;
 85             MethodInfo mi = t.GetMethod("aa",types);
 86             Object returnValue = mi.Invoke(theObj,obj);
 87             this.textBox1.Text = returnValue.ToString();
 88         }
 89         //获取出一个属性
 90         private void attribute()
 91         {
 92             a = Assembly.LoadFrom("Class1.dll");
 93             Type t = a.GetType("Class1.Class1");
 94             t = Type.GetType("fanshetest1.Class1");
 95             Object theObj = Activator.CreateInstance(t);
 96             t.GetProperty("AB").SetValue(theObj,"a",null);
 97             this.textBox1.Text = t.GetProperty("AB").GetValue(theObj, null).ToString();
 98         }
 99         //获取出静态的函数;
100         private void static_()
101         {
102             a = System.Reflection.Assembly.LoadFrom("Class1.dll");
103             Type t = a.GetType("Class1.Class1");
104             t = Type.GetType("fanshetest1.Class1");
105             //创建一个实例
106             Object theObj = Activator.CreateInstance(t);
107             //创建一个方法的实例
108             MethodInfo mi = t.GetMethod("cc");
109             Object returnValue = mi.Invoke(theObj, null);
110             this.textBox1.Text = returnValue.ToString();
111         }
112         //获取出变量;
113         private void variable()
114         {
115             a = Assembly.LoadFrom("Class1.dll");
116             Type t = a.GetType("Class1.Class1");
117             t = Type.GetType("fanshetest1.Class1");
118             Object theObj = Activator.CreateInstance(t);
119             MethodInfo mi = t.GetMethod("a");
120             t.GetField("a").SetValue(theObj,"a");
121             this.textBox1.Text = t.GetField("a").GetValue(theObj).ToString();
122         }
123         //获取出私有变量反射值;
124         private void private_()
125         { 
126             
127         }
128         //构造函数
129         private void gouzaohanshu()
130         {
131             Type t = a.GetType("Class1.Class1");
132             t = Type.GetType("fanshetest1.Class1");
133             //创建构造函数类型
134             Type[] structure_Type = new Type[1];
135             structure_Type[0] = Type.GetType("System.String");
136             //定义构造函数传参类型
137             Object[] structure_Obj = new Object[1];
138             structure_Obj[0] = "aa";
139             //创建一个 实例
140             Object theObj = Activator.CreateInstance(t,structure_Obj);
141             //MethodInfo structure_Mi = t.GetConstructor(structure_Type);
142             //MethodInfo structure_Mi = t.GetMethod("Class1", structure_Type);
143             //structure_Mi.Invoke(theObj, structure_Obj);
144             MethodInfo mi = t.GetMethod("a");
145             //t.GetField("a").SetValue(theObj, "a");
146             this.textBox1.Text = t.GetField("a").GetValue(theObj).ToString();
147         }
148     }
149 }

如上便是自个儿一个月来C#的学习计算,C#那门语言精雕细刻,还会有多数值得小编读书的位置

当类是多少个风味(Attribute卡塔 尔(阿拉伯语:قطر‎时,以Attribute结尾,当类是贰个极其(Exception卡塔 尔(阿拉伯语:قطر‎时,以Exception结尾:

  相像命名空间默许的称号是项目标名字。

 

Class ColorSetException

  成效:用来组织C#程序,多个同名的类位居五个例外的命名空间下就不会出错。  

Class CauseExceptionAttribute

当大家用Visual Studio创立叁个Windows窗体项目时,私下认可情形下,C#会将三个窗体加多到项目中,并为其取名叫Form1。并自动生成一些皮之不存毛将焉附的文件,表示该窗体的多个文件称为Form1.cs和Form1.designer.cs

当类只需有贰个对象实例(全局对象,比方Application等卡塔尔,必须以Class结尾,如

Program.cs:

Class ScreenClass

  里面有Main()函数,是程序的进口,正是三个程序运维时,最初运维的地点,Main()函数里有支配运营的时候先运行哪多少个窗体Application.Run(new Form1()),不管是  Winform程序还是调整台都有那么些。

Class SystemClass

Form1.cs: 

当类只用于作为其余类的基类,根据事态,以Base结尾:

  是我们自身写入的代码,在里边写一些情势和事件管理程序

MustInherit Class IndicatorBase

Form1.designer.cs:

万一定义的类是多少个窗体,那么名字的末端总得加后缀Form,假若是Web窗体,必须加后缀Page:

  C#窗体设计器自动写入代码的文书,那几个代码用于贯彻全数从“工具箱”中拖放控件到窗体、在“属性”窗口中设置属性等操作,日常不提入手动去编辑此文件,风流洒脱旦动手修改了,只要您的Form设值有一丢丢对不上Designer.cs,C#将不会履行Designer.cs文件。解决办法是重做二个Form,让VS自动生成八个Designer.cs文件,除非你非常熟习Designer.cs和Form的关联。

Class PrintForm : Inherits Form * Windows窗体

Form1.cs和Form1.designer.cs其实是叁个类,在开始的一段时期的VS版本里是从未Designer.cs的,VS为了让我们方便处理、编制程序的时候越来越直观,将逻辑类和设计类分开,用partial关键字把窗体类给拆开了。

Class StartPage : Inherits Page * Web窗体

Form1.resx:

2、枚举和布局

  用来贮存在窗体能源的,例如您自定义了您的窗体的Logo,这一个图标就能出以往Form1.resx里边。

同等必得以名词或名词短语命名。最佳反映枚举或组织的表征,如:

 

Enum ColorButtons 以复数结尾,评释那是四个枚举

Structure CustomerInfoRecord 以Record结尾,注明这是二个结构体

3、委派类型

常备的委派类型以描述动作的名词命名,以彰显委派类型实例的功用:

Delegate Sub DataSeeker (ByVal SeekString As String)

用来事件管理的委派类型,必须以伊夫ntHandler结尾,如:

Delegate Sub DataChangedEventHandler (ByVal Sender As Object, ByVal e As DataChangedEventArgs)

4、接口

与任何品类区别,接口必必要由I作为前缀,并用形容词命名,非凡表现达成接口的类将具备何等工夫:

Interface ISortable

5、模块

模块不是项目,他的称谓除了必需以名词命名外,必得加未来缀Module:

Module SharedFunctionsModule

上述全部准绳的一同特点是,各个组成名称的辞藻都一定要是大写开首,禁绝完全大写或小写的名称。

二、方法和性质的命名

1、方法

任凭函数依旧子程序,方法都一定要以动词或动词短语命名。不要求区分函数和子程序,也不须要指明再次来到类型。

Sub Open(ByVal CommandString As String)

Function SetCopyNumber(ByVal CopyNumber As Integer)

参数须要指明ByVal依旧ByRef,那点写起来会让程序边长,但拾贰分要求。如果未有特别状态,都施用ByVal。参数的命有名的模特式,参考前边“变量的命名方式”。供给重载的法子,平时不写Overloads,依照需求编写制定重载的点子。

2、属性

规范上,字段(Field卡塔尔国是不能够精通的,要拜会字段的值,日常采纳性质。属性以简要清晰的名词命名:

Property Concentration As Single

Property Customer As CustomerTypes

3、事件

事件是超过常规规的属性,只好在事件管理上下文中使用。命名的口径日常是动词或动词的分词,通过时态注脚事件产生的年华:

Event Click As ClickEventHandler

Event ColorChanged As ColorChangedEventHangler

三、变量和常数

常数以申明常数意义的名词命名,日常不区分常数的体系:

Const DefaultConcentration As Single = 0.01

在严刻要求的代码中,常数以c_开头,如c_DefaultConcentration,但最好不用用它,它会推动输入困难。

日常品种的变量,只要用有含义的名字命名就可以,不可动用简单的称呼和架空的称呼诸如A,x1等,上面给出了卓绝的例证:

Dim Index As Integer

Dim NextMonthExpenditure As Decimal

Dim CustomerName As String

不能够起太长的名字,应该尽量简洁,如上面包车型地铁事例:

Dim VariableUsedToStoreSystemInformation As String * 错误,太复杂了

Dim SystemInformation As String * 精确,通俗易懂

Dim sysInfo As String * 错误,过于简短

优秀景况能够杜撰四个字母的变量:

Dim g As Graphic

对此控件,应该指明控件的类型,方法是直接在变量前面加以类名:

Friend WithEvents NextPageButton As Button * 按钮

Friend WithEvents ColorChoicerPanel As Panel * 面版

Friend WithEvents CardFileOpenDialog As FileOpenDialog * 文件展开对话框

等等,没有必要规定某体系型的变量的前缀,只需把品种写在末端就能够了,试对照下列代码:

btnCancel.Text = "&Cancel"

CancelButton.Text = "&Cancel"

总的来讲后面一个更能使阅读者精晓变量的品种是一个按键。

四、标签

标签正是用来Goto跳转的代码标志,由于Goto并不推荐使用,所以标签的接纳也正如苛刻。标签必需全体大写,中间的空格用下划线_取代他,何况应当以_开头,比如:

_A_LABEL_EXAMPLE:

如此那般定义标签是为着与此外代码成分丰盛数差距。

五、名字空间

平凡,三个工程采纳一个名字空间,平日不供给用Namespace语句,而是在工程选项的“Root Namespace”中钦命,使用根名字空间能够使代码越发有条有理,轻易修正,那点是VB十足的长处。名字空间的语法是:

公司名.产品名[.组件名的复数]

如:

Namespace Ninputer.VirtualSc

VB.net编码标准,是生龙活虎种被认证能不言而谕修正代码可读性,并带动代码管理、分类的编码规...

连锁随笔

相关搜索:

后天看吗

研究技能库

回去首页

  • Struts2之手工业编码方式开展输入校验,struts2校
  • 解决 java “错误:编码GBK 的不可映射字符”
  • Python编码标准,python编码
  • Python base64编码解码实例,pythonbase64
  • BASE64 编码和平解决码,BASE64编码解码
  • C语言字符编码管理,字符编码

相关频道: Java编程  C#教程  C语言  C 教程  VC教程  Delphi教程  VB教程  工具软件  

本文由星彩网app下载发布于计算机编程,转载请注明出处:也适用于C,类的反射实例

TAG标签: 星彩网app下载
Ctrl+D 将本页面保存为书签,全面了解最新资讯,方便快捷。