当前位置:文档之家› c# 通过反射获取类的字段值

c# 通过反射获取类的字段值

c# 通过反射获取类的字段值
c# 通过反射获取类的字段值

FieldInfo.GetValue 方法

在派生类中被重写时,返回给定对象支持的字段的值。

命名空间: System.Reflection

程序集: mscorlib(在mscorlib.dll 中)

如果该字段是静态的,则忽略obj。对于非静态字段,obj 应是继承或声明该字段的类的实例。请注意,GetValue 的返回类型为Object。例如,如果此字段包含一个Boolean 基元值,则返回带有相应Boolean 值的Object 的实例。在返回该值以前,GetValue 将检查用户是否有访问权限。

静态字段:obj.GetType().GetField(字段名).GetValue(null);

实例非静态字段:typeof(类名).GetField(字段名,BindingFlags标识).GetValue(对象实例变量);

示例:获取静态字段的值

class MyClass

{

public static String val = "test";

public static void Main()

{

FieldInfo myf = typeof(MyClass).GetField("val");

Console.WriteLine(myf.GetValue(null));

val = "hi";

Console.WriteLine(myf.GetValue(null));

}

}

示例:获取对象实例的字段值

public class MyClass

{

public string myFieldA;

public string myFieldB;

public MyClass()

{

myFieldA = "A public field";

myFieldB = "Another public field";

}

}

public class FieldInfo_GetValue

{

public static void Main()

{

MyClass myInstance = new MyClass();

Type myType = typeof(MyClass);

try

{

// Get the FieldInfo of MyClass.

FieldInfo[] myFields = myType.GetFields(BindingFlags.Public

| BindingFlags.Instance);

Console.WriteLine("\n显示{0}类型实例各字段的值.\n", myType);

for(int i = 0; i < myFields.Length; i++)

{

Console.WriteLine("The value of {0} is: {1}",

myFields[i].Name, myFields[i].GetValue(myInstance));

}

}

catch(Exception e)

{

Console.WriteLine("Exception : {0}", e.Message);

}

}

}

下面举一个很实用的例子

有一个控件对象,它拥有Click事件,用户给Click事件添加了事件响应函数(EventHandler)。现在需要用一个扩展的自定义控件来通过代码方式动态替换现有控件。这样,即需要将原控件的事件处理函数复制过来。而事件对象不能被复制,只能通过反射的方式来实现。

深入分析:控件的Click事件定义方式可能如下。其中Events为EventHandlerList类型的集合对象,用来存储所有事件(在https://www.doczj.com/doc/7a5395035.html,ponent中定义)。EventClick

为object类型的对象,作为区分各类Event的key。

订阅和取消事件的实现方式如下

可通过如下方法列出所有事件类型:

private static IEnumerableGetEventKeysList(Component issuer ) {

return

from key in issuer.GetType( ).GetFields(BindingFlags.Static|BindingFlags.NonPublic| BindingFlags.FlattenHierarchy)

where https://www.doczj.com/doc/7a5395035.html,.StartsWith("Event")

select https://www.doczj.com/doc/7a5395035.html,;

}

第三讲 数据类型

第三讲数据类型 教学要求: 1.了解值类型和引用类型的区别 2.掌握数据类型转换的几种情况 教学学时: 2H 一.数据类型的分类 在C#中提供的数据类型有两大类:值类型和引用类型。 值类型直接存储数据,不可以为空,也不可以派生出新的类型,包括整型、实型、布尔型、字符型、结构型和枚举型,值类型数据在栈中存储。 static void Main(string[] args) { int x, y; x = 5; y = x; x=10; Console.WriteLine("x={0},y={1}", x, y); y = 20; Console.WriteLine("x={0},y={1}", x, y); Console.ReadKey(); } 引用类型存储对实际数据的引用(地址),引用类型分两步创建: 首先在栈上创建一个引用变量,然后在堆上创建对象本身,再把这个内存的地址赋给引用变量。 C#有两个内置的引用类型:object类型和string类型。 object类型的变量可以引用任何类型的数据。 string类型的变量只可以引用字符串。 static void Main(string[] args) { string s1 = "agagssa"; string s2 = null; Console.WriteLine("s1={0},s2={1}", s1, s2); s2 = s1; s1 = "512512"; Console.WriteLine("s1={0},s2={1}", s1, s2);

Console.ReadKey(); } 补充知识(内存中的栈与堆的区别) 栈只能由系统自动分配,堆可以由程序员自主申请分配。 栈的空间较小(1M或2M),堆的空间较大(受限于系统有效虚拟内存)。 栈的访问速度快,堆的访问速度慢。 栈的使用不会产生碎片,而堆的使用会产生碎片。 对于使用用户自定义的类或系统定义的类用new关键字来创建一个新的对象时,过程也是这样的。 class Student { public int ID; public string Name; } class Program { static void Main(string[] args) { Student x = new Student(); x.ID = 5; https://www.doczj.com/doc/7a5395035.html, = "wang"; Student y; y = x; y.ID = 10; https://www.doczj.com/doc/7a5395035.html, = "cheng"; Console.WriteLine("x.ID={0},https://www.doczj.com/doc/7a5395035.html,={1}", x.ID, https://www.doczj.com/doc/7a5395035.html,); Console.WriteLine("y.ID={0},https://www.doczj.com/doc/7a5395035.html,={1}", y.ID, https://www.doczj.com/doc/7a5395035.html,); Console.ReadKey(); } } 二.值类型的数据与object类型数据之间的赋值类型转换 1. 将值类型的数据赋值给object类型变量时能自动完成将值类型的数据转换为object类型数据。 int x = 123; object obj1 = x; //相当于object obj1 = (object) x; x = x + 100; Console.WriteLine("x={0}", x); Console.WriteLine ("obj1={0}",obj1); Console.Read(); 输出结果: x=223 obj1=123 说明:

经典条件反射与操作条件反射的区别

经典条件反射与操作条件反射的区别 集团公司文件内部编码:(TTT-UUTT-MMYB-URTTY-ITTLTY-

经典条件反射与操作条件反射的区别 “经典条件反射”和“操作性条件反射”这两个学习理论在《教育心理学》中处于非常重要的地位,在历年教师资格证和中也是一个高频考点。而很多学员在备考过程中,总觉得这两个理论比较难理解,也不太好区分清楚。下面中公资深讲师就此问题和大家做一个简单的介绍,希望能为大家的学习提供一些帮助。 经典条件反射和操作性条件反射都属于条件反射的范畴。说到条件反射,就不得不先说一下反射这一概念。反射是有机体在神经系统的参与下,对内外环境刺激做出的规律性应答。比如我们生活中经常遇到的瞳孔反射(瞳孔遇强光缩小)、吃东西流口水、手碰到烫的东西会迅速地缩回来等等现象都属于反射现象。反射一般分为两大类:一种叫无条件反射,一种叫条件反射。无条件反射是与生俱来的,是不学即会的反射,即本能,是反射活动的基本形式。比如朝向反射、膝跳反射、瞳孔反射等都是无条件反射。而条件反射是机体在无条件反射的基础上,经过后天训练和学习建立起来的反射,是反射活动的高级形式。比如多次吃过梅子的人,当他看到梅子就会流口水。 经典条件反射(又称巴甫洛夫条件反射),是指一个刺激和另一个带有奖赏或惩罚的无条件刺激多次联结,可使个体学会在单独呈现该一刺激时,也能引发类似无条件反应的条件反应。经典条件反射最着名的例子是巴甫洛夫的狗的唾液条件反射实验。 俄国生理学家伊凡·巴甫洛夫(IvanPavlov,1849-1936)是最早提出经典性条件反射的人。他在研究消化现象时,观察了狗的唾液分泌,即对食物的一种反应特征。他的实验方法是,把食物显示给狗,并测量其唾液分泌。在这个过程中,他发现如果随同食物反复给一个中性刺激,即一个并不自动引起唾液分泌的刺激,如铃声,这狗就会逐渐“学会”在只有铃响但没有食物的情况下分泌唾液。一个原是中性的刺激(铃声)与一个原来就能引起

C笔试题目:将"引用"作为函数返回值类型的格式、好处和需要.doc

C++笔试题目:将”引用”作为函数返回值类型的格式、好处和需要格式:类型标识符函数名(形参列表及类型说明){//函数体} 好处:在内存中不产生被返回值的副本;(注意:正是因为这点原因,所以返回一个局部变量的引用是不可取的因为随着该局部变量生存期的结束,相应的引用也会失效产生runtimeerror! 注意事项: (1)不能返回局部变量的引用。这条可以参照EffectiveC++[l]的Item31。主要原因是局部变量会在函 返回后被销毁,因此被返回的引用就成为了”无所指”的引用,程序会进入未知状态。 (2 )不能返回函数内部ne w分配的内存的引用。这条可以参照Effect i veC++[l]的I tem31。虽然不存在局部变量的被动销毁问题,可对于这种情况(返回函数内部new分配内存的引用),又面临其它尴尬局面。例如,被函数返回的引用只是作为一个临时变量出现,而没有被赋予一个实际的变量,那么这个引用所指向的空间(由n ew分配)就无法释放,造成memoryl eak。 (3)可以返回类成员的引用,但最好是const。这条原则可以参照Eff ect iveC++[l]的I tem30。主要原因是当对

象的属性是与某种业务规则(busines sru le)相关联的时候,其赋值常常与某些其它属性或者对象的状态有关,因此有必要将赋值操作封装在一个业务规则当中。 如果其它对象可以获得该属性的非常量引用(或指针),那么对该属性的单纯赋值就会破坏业务规则的完整性。 (4)流操作符重载返回值申明为“引用”的作用: 流操作符〉,这两个操作符常常希望被连续使用,例如: cout对于返回一个流指针则不能连续使用这个操作符象流操作符一样,是可以连续使用的,例如:x=j=10;或者(x=10)=100 :赋值操作符的返回值必须是一个左值,以便可以被继续赋值。因此引用成了这个操作符的惟一返回值选择。 例3 ^include in tp ut (intn); in tvals [10]: i nter ror=-l; voi dmain() { put (0)=10 ://以put (0)函数值作为左值,等价于V als[0]二10 ; put (9) =20;//以put (9)函数值作为左值,等价于va ls[9]=20;

c#总复习题

一.选择题: 1. C#语言源代码文件的后缀名为______________. A .C# B .C C C .CSP D .CS AN: D 2. 构建桌面应用程序需要.NET提供的类库是_____________. A https://www.doczj.com/doc/7a5395035.html, B Windows.Form C XML D https://www.doczj.com/doc/7a5395035.html, AN: B 3. 与C++等语言相比,C#中增加的一个类成员访问修饰符是___________. A private B public C protected D internal AN: D 4. C#中程序的入口方法名是____________________. A Main B. main C Begin D using AN: A 5. 关于C#语言的基本语法,下列哪些说法是正确的? A. C#语言使用using 关键字来引用.NET 预定义的名字空间; B. 用C#编写的程序中,Main 函数是唯一允许的全局函数; C. C#语言中使用的名称不区分大小写; D. C#中一条语句必须写在一行内; AN: A 6.在C#中,表示一个字符串的变量应使用以下哪条语句定义? A. CString str; B. string str; C. Dim str as string D. char * str; AN:B 7.C#中的值类型包括三种,它们是____。 A.整型、浮点型、基本类型 B.数值类型、字符类型、字符串类型 C.简单类型、枚举类型、结构类型D.数值类型、字符类型、枚举类型 AN:C 8.枚举类型是一组命名的常量集合,所有整型都可以作为枚举类型的基本类型,如果类型省略,见约定为______。 A.int B.sbyte C.uint D.ulong AN:A 9.C#的引用类型包括类、接口、数组、委托、object和string。其中object______________根类。A.只是引用类型的B.只是值类型的 C.只是string类型的D.是所有值类型和引用类型的 AN:D 10.浮点常量有三种格式,下面_____________组的浮点常量都属于double类型。 A.0.618034,0.618034D, 6.18034E-1

以太网端口类型描述

100/1000为速率 base表明使用的频率是基带 T使用的介质是同轴电缆,TX表明介质为双绞线,FX表明介质为光纤 X也表示光纤。根据BASE后面的媒质类型可以知道其支持的最大传输距离 1000BaseCX 或 1000Base-CX 1000BaseCX,也叫做1000Base-CX,是通过一个特殊的短于25米的150欧姆的电缆来传输的吉比特以太网。这种电缆是一种屏蔽了的电 缆。为了使由电压不稳造成的安全和干扰问题降到最小,发射机和接收器共享一个接点。为了最小化传输失真,每个连接器的回波损耗被限制在20db之内。连接 器的类型是DB-9连接器或者HSSDC。 1000BaseF 或 1000Base-F 1000BaseF,也叫做1000Base-F,是一个通过光纤来进行以太网通信的1000兆比特每秒的基带规格。1000Base-F使用 8B/10B美国国家标准协会的X3T11的光纤信道, FC-1帧编码,串行器/反串行器和反向不归零制在光纤上,计时在1250波特。1000BaseF多模式光纤能够支持平均纤长为500m的全双工,单个 模式的光纤支持纤长为2-3km的全双工。 1000BaseLH 或 1000Base-LH 1000BaseLH,也叫做 1000Base-LH,是一个定义在IEEE 802.3z中的通过光纤电缆的吉比特以太网标准。LH代表一个long haul,1000Base-LH使用长波激光(1310nm) 通过多模态和单模态光纤。1000BaseLH能够最大支持距离为550m的多模式光纤和10km的单模式光纤。 1000BaseLX 或 1000Base-LX 1000BaseLX,也叫做1000Base-LX,是一个定义在IEEE 802.3z中的通过光纤电缆的千兆以太网标准。LX代表长波, 1000Base-LX使用长波激光(1310nm) 通过模态和单模式光纤,它是和1000Base-SX相对的,1000Base-SX使用短波激光通过多模式光纤。1000BaseLX能够最大支持距离 为550m的多模式光纤和5km的单模式光纤。 1000BaseSX 或 1000Base-SX 1000BaseSX,也叫做1000Base-SX,是一个定义在IEEE 802.3z中的通过光纤电缆的千兆以太网标准。SX代表短波,1000Base-SX使用短波激光通过多模式光纤,其和1000Base-LX是相对 的,1000Base-LX是使用长波激光通过多模态和单模态光纤。基于1000BaseSX的多模态光纤的最远距离是550m。 1000BaseT 或 1000Base-T 1000BaseT,也叫做1000Base-T,它是一个通过可达100m的双绞线支持数据传输至1000 Mbps的物理层标准。1000BASE-T 标准是定义在IEEE 802.3ab中的。和以太网相似,1000BaseT是基于带冲突检测的CSMA的局域网存取方法。 1000BaseX 或 1000Base-X 1000BaseX 定义了多种千兆以太网标准,就如定义在 IEEE802.3z中的,例如1000BaseLX, 1000BaseSX, 1000BaseCX 和1000BaseLH。基本上,所有的标准包含在1000BaseX使用带有8位数据的8B/10B编码方案和 2位纠错数据。每个规格允许不同的电缆(光纤和铜线)长度,使用不同的有线媒体。 1000BaseZX 1000BaseZX(或1000Base-ZX)是一个千兆以太网通信的Cisco指定标准。1000BaseZX运行在平常的链接跨度达43.5英里 (70 km)的单模式光纤上。使用premium单模式光纤或者色散位移单模光纤链接跨度达62.1英里 (100 km)是可能的。1000BaseZX 使用长波激光。1000BASEZX GBIC规定为用作基于各种交换机和路由器产品的,在千兆以太网平台上工作的物理媒体相关(子层)一个部件。它的运行信令速率为1250 Mbaud,传输和接收 8B/10B的编码数据。 100BaseFX 或 100Base-FX 100BaseFX,也叫做100Base-FX,是一个100-Mbps基带快速以太网标准。100BaseFX,是定义在 IEEE 802.3标准中的 100BaseX的一部分,其在通过光纤的快速以太网上使用4B/5B分组编码。100BaseFX的光纤长度能够支持:412m的全 双工毫米光纤,2km的全双工毫米光纤,15-20km的全双工单模光纤. 100BaseT 或 100Base-T 100BaseT,也叫做100Base-T或者快速以太网,是一个支持数据传输速率达100 Mbps(100兆位每秒)。100BASE-T是基于曼彻斯特信号编码传输通过3号或更好的双绞线。100BASE-T 标准是定义在 IEEE 802.3u中的,100BaseT是基于带冲突检测的CSMA的局域网存取方法。 100BaseT4 或 100Base-T4 100BaseT4,也叫做100Base-T4,是一个100-Mbps基带快速以太网标准,其使用4对3, 4或5号非屏蔽双绞线。为了保证合适的信号时间和质量,一个100BaseT4片段在长度上不能超过100m,100BaseT4 是 IEEE 802.3标准的一部分。 100BaseTX 或 100Base-TX 100BaseTX,也叫做100Base-TX,是一个使用两对UTP或者STP陪线的100-Mbps基带快速太网标准,基于4B/5B信号编码。第 1对线用于接收数据,第2对用于传输数据。为了保证适宜的信号时间和质量,一个100BaseTX片段在长度上不能超过100米。在 IEEE 802.3u标准中100BaseTX是100BaseX的一部分。 100BaseX 或 100Base-X 100BaseX,包括100BaseFX 和 100BaseTX,是一个基于 IEEE 802.3标准的使用4B/5B分组编码通过快速以太网的光纤电缆和双对子的100-Mbps基带快速以太网标准。 100VG-AnyLAN 100VG-AnyLAN,最初是由 Hewlett-Packard发展的,其是一个100-Mbps快速以太网和令牌环媒体技术,其使用4对3, 4或5号非屏蔽双绞线布线。100VG-AnyLAN 能够被用于操作在现有的10BaseT以太网络上。100VG-AnyLAN被定义在 IEEE 802.12标准里。 10Base2 或 10Base-2

JAVA常见返回类型

JAVA常见返回类型 Java是Sun公司推出的一种编程语言。它是一种通过解释方式来执行的语言,语法规则和C++类似。同时,Java也是一种跨平台的程序设计语言。用Java语言编写的程序叫做“Applet”(小应用程序),用编译器将它编译成类文件后,将它存在WWW页面中,并在HTML 档上作好相应标记,用户端只要装上Java的客户软件就可以在网上直接运行“Applet”。Java非常适合于企业网络和Internet环境,现在已成为Internet中最受欢迎、最有影响的编程语言之一。 Java有许多值得称道的优点,如简单、面向对象、分布式、解释性、可靠、安全、结构中立性、可移植性、高性能、多线程、动态性等。Java摈弃了C++中各种弊大于利的功能和许多很少用到的功能。 Jave可以运行与任何微处理器,用Java开发的程序可以在网络上传输,并运行于任何客户机上。那么什么是JAVA常见返回类型呢? 基本数据类型又可以分为3小类: 整型数据类型,布尔数据类型,浮点型数据类型 整型数据类型: byte(1个字节)----字节型 short(2个字节)-----短整型 char(2个字节)----字符型 int(4个字节)----整型 long(8个字节)-----长整型 布尔类型:boolean(1个字节)----布尔型 浮点型:float(4个字节)----单精度浮点型 double(8个字节)----双精度浮点型 2、对象类型: 1)自定义的对象类型 2)类库类型 每一种返回类型都有默认值: int:0

byte:0 char:/u0000(在控制台显示为一个方格) short:0 long:0 boolean:false float:0.0 Double:0.0 Object:null (ps:本文章由北大青鸟广安门校区搜集自互联网)

经典条件反射与操作条件反射的区别

经典条件反射与操作条件反射的区别“经典条件反射”和“操作性条件反射”这两个学习理论在《教育心理学》中处于非常重要的地位,在历年教师资格证和教师招聘考试中也是一个高频考点。而很多学员在备考过程中,总觉得这两个理论比较难理解,也不太好区分清楚。下面中公资深讲师就此问题和大家做一个简单的介绍,希望能为大家的学习提供一些帮助。 经典条件反射和操作性条件反射都属于条件反射的范畴。说到条件反射,就不得不先说一下反射这一概念。反射是有机体在神经系统的参与下,对内外环境刺激做出的规律性应答。比如我们生活中经常遇到的瞳孔反射(瞳孔遇强光缩小)、吃东西流口水、手碰到烫的东西会迅速地缩回来等等现象都属于反射现象。反射一般分为两大类:一种叫无条件反射,一种叫条件反射。无条件反射是与生俱来的,是不学即会的反射,即本能,是反射活动的基本形式。比如朝向反射、膝跳反射、瞳孔反射等都是无条件反射。而条件反射是机体在无条件反射的基础上,经过后天训练和学习建立起来的反射,是反射活动的高级形式。比如多次吃过梅子的人,当他看到梅子就会流口水。 经典条件反射(又称巴甫洛夫条件反射),是指一个刺激和另一个带有奖赏或惩罚的无条件刺激多次联结,可使个体学会在单独呈现该一刺激时,也能引发类似无条件反应的条件反应。经典条件反射最着名的例子是巴甫洛夫的狗的唾液条件反射实验。 俄国生理学家伊凡·巴甫洛夫(Ivan Pavlov,1849-1936)是最早提出经典性条件反射的人。他在研究消化现象时,观察了狗的唾液分泌,即对食物的一种反应特征。他的实验方法是,把食物显示给狗,并测量其唾液分泌。在这个过程中,他发现如果随同食物反复给一个中性刺激,即一个并不自动引起唾液分泌的刺激,如铃声,这狗就会逐渐“学会”在只有铃响但没有食物的情况下分泌唾液。一个原是中性的刺激(铃声)与一个原来就能引起某种反应的刺激(食物)相结合,而使动物学会对那个中性刺激(铃声)做出反应,这就是经典性条件反射的基本内容。

以太网协议

以太网协议 历史上以太网帧格式有五种: 1 E thernet V1:这是最原始的一种格式,是由Xerox P ARC提出的3Mbps CSMA/CD以太网标准的封装格式,后来在 1980年由DEC,Intel和Xerox标准化形成E thernet V1标准; 2 E thernet II即DIX 2.0:Xerox与DEC、Intel在1982年制定的以太网标准帧格式。Cisco名称为:ARP A。 这是最常见的一种以太网帧格式,也是今天以太网的事实标准,由DE C,Intel和Xerox在1982年公布其标准,主要更改了E thernet V1的电气特性和物理接口,在帧格式上并无变化;E thernet V2出现后迅速取代E thernet V1成为以太网事实标准;E thernet V2帧头结构为6bytes的源地址+6bytes的目标地址+2Bytes的协议类型字段+数据。 常见协议类型如下: 0800 IP 0806 ARP 0835 RARP 8137 Novell IPX 809b Apple Talk 如果协议类型字段取值为0000-05dc(十进制的0-1500),则该帧就不是E thernet V2(ARP A)类型了,而是下面讲到的三种802.3帧类型之一;E thernet可以支持TCP/IP,Novell IP X/SP X,Apple Talk P hase I等协议;RFC 894定义了IP 报文在E thernet V2上的封装格式; 在每种格式的以太网帧的开始处都有64比特(8字节)的前导字符,如图所示。其中,前7个字节称为前同步码(P reamble),内容是16进制数0xAA,最后1字节为帧起始标志符0xAB,它标识着以太网帧的开始。前导字符的 作用是使接收节点进行同步并做好接收数据帧的准备。 ——P R:同步位,用于收发双方的时钟同步,同时也指明了传输的速率(10M和100M的时钟频率不一样,所以100M网卡可以兼容10M网卡),是56位的二进制数101010101010..... ——SD: 分隔位,表示下面跟着的是真正的数据,而不是同步时钟,为8位的10101011,跟同步位不同的是最后2位 是11而不是10. ——DA:目的地址,以太网的地址为48位(6个字节)二进制地址,表明该帧传输给哪个网卡.如果为FFFFFFFFFFFF, 则是广播地址,广播地址的数据可以被任何网卡接收到. ——SA:源地址,48位,表明该帧的数据是哪个网卡发的,即发送端的网卡地址,同样是6个字节. ----TYP E:类型字段,表明该帧的数据是什么类型的数据,不同的协议的类型字段不同。如:0800H 表示数据为IP包,0806H 表示数据为ARP包,814CH是SNMP包,8137H为IP X/SP X包,(小于0600H的值是用于IEEE802 的,表示数据包的长度。) ----DATA:数据段,该段数据不能超过1500字节。因为以太网规定整个传输包的最大长度不能超过1514字节。 (14字节为DA,SA,TYP E)

java反射机制

Java的反射机制是Java特性之一,反射机制是构建框架技术的基础所在。灵活掌握Java反射机制,对大家以后学习框架技术有很大的帮助。 那么什么是Java的反射呢? 大家都知道,要让Java程序能够运行,那么就得让Java类要被Java虚拟机加载。Java类如果不被Java虚拟机加载,是不能正常运行的。现在我们运行的所有的程序都是在编译期的时候就已经知道了你所需要的那个类的已经被加载了。 Java的反射机制是在编译并不确定是哪个类被加载了,而是在程序运行的时候才加载、探知、自审。使用在编译期并不知道的类。这样的特点就是反射。 那么Java反射有什么作用呢? 假如我们有两个程序员,一个程序员在写程序的时候,需要使用第二个程序员所写的类,但第二个程序员并没完成他所写的类。那么第一个程序员的代码能否通过编译呢?这是不能通过编译的。利用Java反射的机制,就可以让第一个程序员在没有得到第二个程序员所写的类的时候,来完成自身代码的编译。 Java的反射机制它知道类的基本结构,这种对Java类结构探知的能力,我们称为Java类的“自审”。大家都用过Jcreator和eclipse。当我们构建出一个对象的时候,去调用该对象的方法和属性的时候。一按点,编译工具就会自动的把该对象能够使用的所有的方法和属性全部都列出来,供用户进行选择。这就是利用了Java反射的原理,是对我们创建对象的探知、自审。 Class类 要正确使用Java反射机制就得使用https://www.doczj.com/doc/7a5395035.html,ng.Class这个类。它是Java反射机制的起源。当一个类被加载以后,Java虚拟机就会自动产生一个Class对象。通过这个Class对象我们就能获得加载到虚拟机当中这个Class对象对应的方法、成员以及构造方法的声明和定义等信息。 反射API ◆反射API用于反应在当前Java虚拟机中的类、接口或者对象信息 ◆功能 —获取一个对象的类信息. —获取一个类的访问修饰符、成员、方法、构造方法以及超类的信息. —检获属于一个接口的常量和方法声明. —创建一个直到程序运行期间才知道名字的类的实例. —获取并设置一个对象的成员,甚至这个成员的名字是 在程序运行期间才知道. —检测一个在运行期间才知道名字的对象的方法 利用Java反射机制我们可以很灵活的对已经加载到Java虚拟机当中的类信

2014-2015-1C#复习题

2014-2015-1《C#桌面程序应用开发》复习题 一、选择题 1、装箱是把值类型转换到( b )类型。 a)数组b)引用c)char d)string 2、下列哪个类型的对象是https://www.doczj.com/doc/7a5395035.html,在非连接模式下处理数据内容的主要对象?(d ) a) Command b) Connection c) DataAdapter d) DataSet 3、枚举类型是一组命名的常量集合,所有整型都可以作为枚举类型的基本类型,如果类型 省略,则定义为( a )。 a) int b) sbyte c) uint d) ulong 4、面向对象编程中的“继承”的概念是指( b ) a) 对象之间通过消息进行交互b)派生自同一个基类的不同类的对象具有一些共同特征c)对象的内部细节被隐藏d) 派生类对象可以不受限制地访问所有的基类对象5、在C#的类结构中,class关键字前面的关键字是表示访问级别,下面哪个关键字表示该类只能被这个类的成员或派生类成员访问? ( d )。 a) public b) private c) internal d) protected 6、下列类型中, 哪些不属于引用类型?( b )。 a) String b) int c) Class d) Delegate 7、数组pins的定义如下: int[] pins=new int[4]{9,2,3,1}; 则pins[1]=( b ) a) 1 b) 2 c) 3 d) 9 8、创建数据库连接使用的对象是( a )。 a) Connection b) Command c) DataReader d) DataSet 9、调用方法时,如果想给方法传递任意个数的参数时,应选用哪个关键字( c )。 a) ref b) out c) params d) 无特殊要求 10、C#中TestClass为一自定义类,其中有以下属性定义 public void Property{…}开卷考 使用以下语句创建了该类的对象,并使变量obj引用该对象: TestClass obj = new TestClass(); 那么,可通过什么方式访问类TestClass的Property属性?( a ) a) Obj,Property; b) MyClass.Property; c) obj :: Property; d) obj.Property (); 11、下列关于C#面向对象应用的描述中,哪项是正确的?( c )。 a) 派生类是基类的扩展,派生类可以添加新的成员,也可去掉已经继承的成员 b) abstract方法的声明必须同时实现 c) 声明为sealed的类不能被继承 d)接口像类一样,可以定义并实现方法 12、C#中导入某一命名空间的关键字是( a )。 a) using b) use c)import d) include 13、一般情况下,异常类存放在什么命名空间中?( b )。 a) 生成异常类所在的命名空间b) System.Exception命名空间 c) System.Diagnostics命名空间d) System命名空间 14、若将数据库中的数据填充到数据集,应调用SqlDataAdapter的(c )方法。

C#引用类型和值类型的区别

实际举例C#引用类型和值类型的区别 我们都知道,c#的两大数据类型分别为值类型和引用类型。很多人或许闭着眼睛都能说出值类型包括简单类型、结构体类型和枚举类型,引用类型包括自定义类、数组、接口、委托等,但是当被问及到二者之间的联系和区别,什么时候用struct什么时候用class时,就常常混淆不清了。为此,了解值类型和引用类型的本质差异就变的很有必要了。 ?值类型直接存储其值,变量本身就包含了其实例数据,而引用类型保存的只是实例数据的内存引用。因此,一个值类型变量就永远不会影响到其他的值类型变量,而两个引用类型变量则很有可能指向同一地址,从而发生相互影响。 ?从内存分配上来看,值类型通常分配在线程的堆栈上,作用域结束时,所占空间自行释放,效率高,无需进行地址转换,而引用类型通常分配在托管堆上,由GC来控制其回收,需要进行地址转换,效率降低,这也正是c#需要定义两种数据类型的原因之一。 ?值类型均隐式派生自System.ValueType,而System.ValueType又直接派生于System.Object,每种值类型均有一个隐式的默认构造函数来初始化该类型的默认值,注意所有的值类型都是密封(sealed)的,所以无法派生出新的值类型。而且System.ValueType 本身是一个类类型,而不是值类型,因为它重写了object的Equals()方法,所以对值类型将按照实例的值来比较,而不是比较引用地址。 ?C# 的统一类型系统,使得值类型可以转化为对象来处理,这就是常说的装箱和拆箱。由于装拆箱需要装建全新对象或做强制类型转换,这些操作所需时间和运算要远远大于赋值操作,因此不提倡使用它,同时也要尽量避免隐式装拆箱的发生。 注:栈是操作系统分配的一个连续的内存区域,用于快速访问数据。因为值类型的容量是已知的,因此它可存储在栈上。而托管堆是CLR在应用程序启动时为应用程序预留的一块连续内存区,是用于动态内存分配的内存区,引用类型的容量只有到运行时才能确定,所有用堆来存储引用类型。 C#的两种数据类型延伸之一--嵌套类型的内存分配 对于引用类型嵌套值类型,以及值类型嵌套引用类型的情况下,内存分配可以根据以下两条规律来判断: ?引用类型始终部署在托管堆上; ?值类型总是分配在它声明的地方:作为字段时,跟随其所属的对象存储;作为局部变量时,存储在栈上。 C#的两种数据类型延伸之二--string类型 string是一个很有意思的引用类型,为什么说它很有意思呢?因为它表现了很多值类型的特点。请看一下代码示例: 示例1 string str1 = "abc";

经典条件反射与操作条件反射的区别

经典条件反射与操作条件反射的区别 “经典条件反射”和“操作性条件反射”这两个学习理论在《教育心理学》中处于非常重要的地位,在历年教师资格证和中也是一个高频考点。而很多学员在备考过程中,总觉得这两个理论比较难理解,也不太好区分清楚。下面中公资深讲师就此问题和大家做一个简单的介绍,希望能为大家的学习提供一些帮助。 经典条件反射和操作性条件反射都属于条件反射的范畴。说到条件反射,就不得不先说一下反射这一概念。反射是有机体在神经系统的参与下,对内外环境刺激做出的规律性应答。比如我们生活中经常遇到的瞳孔反射(瞳孔遇强光缩小)、吃东西流口水、手碰到烫的东西会迅速地缩回来等等现象都属于反射现象。反射一般分为两大类:一种叫无条件反射,一种叫条件反射。无条件反射是与生俱来的,是不学即会的反射,即本能,是反射活动的基本形式。比如朝向反射、膝跳反射、瞳孔反射等都是无条件反射。而条件反射是机体在无条件反射的基础上,经过后天训练和学习建立起来的反射,是反射活动的高级形式。比如多次吃过梅子的人,当他看到梅子就会流口水。 经典条件反射(又称巴甫洛夫条件反射),是指一个刺激和另一个带有奖赏或惩罚的无条件刺激多次联结,可使个体学会在单独呈现该一刺激时,也能引发类似无条件反应的条件反应。经典条件反射最着名的例子是巴甫洛夫的狗的唾液条件反射实验。 俄国生理学家伊凡·巴甫洛夫(IvanPavlov,1849-1936)是最早提出经典性条件反射的人。他在研究消化现象时,观察了狗的唾液分泌,即对食物的一种反应特征。他的实验方法是,把食物显示给狗,并测量其唾液分泌。在这个过程中,他发现如果随同食物反复给一个中性刺激,即一个并不自动引起唾液分泌的刺激,如铃声,这狗就会逐渐“学会”在只有铃响但没有食物的情况下分泌唾液。一个原是中性的刺激(铃声)与一个原来就能引起某种反应的刺激(食物)相结合,而使动物学会对那个中性刺激(铃声)做出反应,这就是经典性条件反射的基本内容。 巴甫洛夫的这个实验可以简化表示为三部分: A:非条件刺激(食物)→非条件反应(分泌唾液) B:非条件刺激(食物)+中性刺激(铃声)→非条件反应(分泌唾液) C:条件刺激(=中性刺激)(食物)→条件反应(=非条件反应)(分泌唾液)

值类型和引用类型的区别

值类型和引用类型的区别[转] 似乎“值类型和引用类型的区别”是今年面试的流行趋势,我已然是连续三次(目前总共也就三次)面试第一个问题就遇到这个了,这是多大的概率啊,100%,哈哈,我该买彩票去! 言归正传,咱还是先来探讨探讨这二者之间有什么区别吧。记得有一次电话面试中,我直接跟面试官说:“值类型是现金,引用类型是存折”,后来想想当时说这话虽是有点儿冲动地脱口而出,但也没什么不妥。我这人不善于背理论的教条,喜欢把书本上那些生硬的话跟现实生活中常见的事物联系起来理解和记忆。 直白点儿说:值类型就是现金,要用直接用;引用类型是存折,要用还得先去银行取现。 声明一个值类型变量,编译器会在栈上分配一个空间,这个空间对应着该值类型变量,空间里存储的就是该变量的值。引用类型的实例分配在堆上,新建一个引用类型实例,得到的变量值对应的是该实例的内存分配地址,这就像您的银行账号一样。具体哪些类型是值类型哪些是引用类型,大家翻翻书,背一背就好了,不过我想,做过一段时间的开发,即使您背不了书上教条的定义,也不会把值类型和引用类型搞混的。接下来,还是老规矩,咱看码说话吧。 1:public class Person 2: { 3:public string Name { get; set; } 4:public int Age { get; set; } 5: } 6: 7:public static class ReferenceAndValue 8: { 9:public static void Demonstration() 10: { 11: Person zerocool = new Person { Name = "ZeroCool", Age = 25 }; 12: Person anders = new Person { Name = "Anders", Age = 47 }; 13: 14:int age = zerocool.Age; 15: zerocool.Age = 22; 16: 17: Person guru = anders; 18: https://www.doczj.com/doc/7a5395035.html, = "Anders Hejlsberg"; 19: 20: Console.WriteLine("zerocool's age:\t{0}", zerocool.Age); 21: Console.WriteLine("age's value:\t{0}", age); 22: Console.WriteLine("anders' name:\t{0}", https://www.doczj.com/doc/7a5395035.html,);

C语言函数说明与返回值

在学习C语言函数以前,我们需要了解什么是模块化程序设计方法。 人们在求解一个复杂问题时,通常采用的是逐步分解、分而治之的方法,也就是把一个大问题分解成若干个比较容易求解的小问题,然后分别求解。程序员在设计一个复杂的应用程序时,往往也是把整个程序划分为若干功能较为单一的程序模块,然后分别予以实现,最后再把所有的程序模块像搭积木一样装配起来,这种在程序设计中分而治之的策略,被称为模块化程序设计方法。 在C语言中,函数是程序的基本组成单位,因此可以很方便地用函数作为程序模块来实现C 语言程序。 利用函数,不仅可以实现程序的模块化,程序设计得简单和直观,提高了程序的易读性和可维护性,而且还可以把程序中普通用到的一些计算或操作编成通用的函数,以供随时调用,这样可以大大地减轻程序员的代码工作量。 函数是C语言的基本构件,是所有程序活动的舞台。函数的一般形式是: type-specifier function_name(parameter list) parameter declarations { body of the function } 类型说明符定义了函数中return语句返回值的类型,该返回值可以是任何有效类型。如果没有类型说明符出现,函数返回一个整型值。参数表是一个用逗号分隔的变量表,当函数被调用时这些变量接收调用参数的值。一个函数可以没有参数,这时函数表是空的。但即使没有参数,括号仍然是必须要有的。参数说明段定义了其中参数的类型。 当一个函数没有明确说明类型时, C语言的编译程序自动将整型( i n t)作为这个函数的缺省类型,缺省类型适用于很大一部分函数。当有必要返回其它类型数据时,需要分两步处理: 首先,必须给函数以明确的类型说明符;其次,函数类型的说明必须处于对它的首次调用之前。只有这样,C编译程序才能为返回非整型的值的函数生成正确代码。 4.1.1 函数的类型说明 可将函数说明为返回任何一种合法的C语言数据类型。 类型说明符告诉编译程序它返回什么类型的数据。这个信息对于程序能否正确运行关系极大,因为不同的数据有不同的长度和内部表示。 返回非整型数据的函数被使用之前,必须把它的类型向程序的其余部分说明。若不这样做,C语言的编译程序就认为函数是返回整型数据的函数,调用点又在函数类型说明之前,编译程序就会对调用生成错误代码。为了防止上述问题的出现,必须使用一个特别的说明语句,通知编译程序这个函数返回什么值。下例示出了这种方法。

深入理解Java反射机制汇总

深入理解Java反射机制 本文较为详细的分析了Java反射机制。分享给大家供大家参考,具体如下: 一、预先需要掌握的知识(java虚拟机) java虚拟机的方法区: java虚拟机有一个运行时数据区,这个数据区又被分为方法区,堆区和栈区,我们这里需要了解的主要是方法区。方法区的主要作用是存储被装载的类的类型信息,当java虚拟机装载某个类型的时候,需要类装载器定位相应的class文件,然后将其读入到java虚拟机中,紧接着虚拟机提取class 中的类型信息,将这些信息存储到方法区中。这些信息主要包括: 1、这个类型的全限定名 2、这个类型的直接超类的全限定名 3、这个类型是类类型还是接口类型 4、这个类型的访问修饰符 5、任何直接超接口的全限定名的有序列表 6、该类型的常量池 7、字段信息 8、方法信息 9、除了常量以外的所有类变量 10、一个到class类的引用 等等(读者可以参考《深入java虚拟机》这本书的叙述) Class类: Class类是一个非常重要的java基础类,每当装载一个新的类型的时候,java虚拟机都会在java堆中创建一个对应于新类型的Class实例,该实例就代表此类型,通过该Class实例我们就可以访问该类型的基本信息。上面说到在方法区中会存储某个被装载类的类型信息,我们就可以通过Class实例来访问这些信息。比如,对于上面说到的信息Class中都有对应的方法,如下:

1、getName();这个类型的全限定名 2、getSuperClass();这个类型的直接超类的全限定名 3、isInterface();这个类型是类类型还是接口类型 4、getTypeParamters();这个类型的访问修饰符 5、getInterfaces();任何直接超接口的全限定名的有序列表 6、getFields();字段信息 7、getMethods();方法信息 等等(读者可以自己参看jdk帮助文档,得到更多的信息) 二、java反射详解 反射的概念:所谓的反射就是java语言在运行时拥有一项自观的能力,反射使您的程序代码能够得到装载到JVM中的类的内部信息,允许您执行程序时才得到需要类的内部信息,而不是在编写代码的时候就必须要知道所需类的内部信息,这使反射成为构建灵活的应用的主要工具。 反射的常用类和函数:Java反射机制的实现要借助于4个类:Class,Constructor,Field,Method;其中class代表的是类对象,Constructor-类的构造器对象,Field-类的属性对象,Method -类的方法对象,通过这四个对象我们可以粗略的看到一个类的各个组成部分。其中最核心的就是Class类,它是实现反射的基础,它包含的方法我们在第一部分已经进行了基本的阐述。应用反射时我们最关心的一般是一个类的构造器、属性和方法,下面我们主要介绍Class 类中针对这三个元素的方法: 1、得到构造器的方法 Constructor getConstructor(Class[] params) -- 获得使用特殊的参数类型的公共构造函数,Constructor[] getConstructors() -- 获得类的所有公共构造函数 Constructor getDeclaredConstructor(Class[] params) -- 获得使用特定参数类型的构造函数(与接入级别无关) Constructor[] getDeclaredConstructors() -- 获得类的所有构造函数(与接入级别无关) 2、获得字段信息的方法

值类型和引用类型的区别

区别: 1、值类型通常被分配在栈上,它的变量直接包含变量的实例,使用效率比较高。 2、引用类型分配在托管堆上,引用类型的变量通常包含一个指向实例的指针,变量通过该指针来引用实例。 3、值类型继承自ValueType(注意:而System.ValueType又继承自System.Object);而引用类型继承自System.Object。 4、值类型变量包含其实例数据,每个变量保存了其本身的数据拷贝(副本),因此在默认情况下,值类型的参数传递不会影响参数本身;而引用类型变量保存了其数据的引用地址,因此以引用方式进行参数传递时会影响到参数本身,因为两个变量会引用了内存中的同一块地址。 5、值类型有两种表示:装箱与拆箱;引用类型只有装箱一种形式。我会在下节以专门的篇幅来深入讨论这个话题。 6、典型的值类型为:struct,enum以及大量的内置值类型;而能称为类的都可以说是引用类型。 7、值类型的内存不由GC(垃圾回收,Gabage Collection)控制,作用域结束时,值类型会自行释放,减少了托管堆的压力,因此具有性能上的优势。例如,通常struct比class更高效;而引用类型的内存回收,由GC来完成,微软甚至建议用户最好不要自行释放内存。 8、值类型是密封的(sealed),因此值类型不能作为其他任何类型的基类,但是可以单继承或者多继承接口;而引用类型一般都有继承性。 9、值类型不具有多态性;而引用类型有多态性。 10、值类型变量不可为null值,值类型都会自行初始化为0值;而引用类型变量默认情况下,创建为null值,表示没有指向任何托管堆的引用地址。对值为null的引用类型的任何操作,都会抛出NullReferenceException异常。 11、值类型有两种状态:装箱和未装箱,运行库提供了所有值类型的已装箱形式;而引用类型通常只有一种形式:装箱 S:通用语言系统。CLS:通用语言规范。CLR:公共语言运行库。 2.1.2 .NET的3C:CTS、CLS和CLR .NET结合Java和COM解决方案两者优点来解决互操作性问题。类似于COM定义的标准二进制格式,.NET定义了一个称为通用类型系统Common Type System(CTS)的类型标准。这个类

相关主题
文本预览
相关文档 最新文档