强制转换

利用反射动态创建对象

房东的猫 提交于 2020-04-04 08:42:56
前两天我发了一篇文章《 通过反射动态实例化对象中出现的一个奇怪问题 》,对反射中的某些问题疑惑不解。通过这几天不断查看MSDN,上网查询,现在终于解决了该问题。 在VS.Net中,有很多种方法动态调用对象的构造函数。一是通过Activator类的CreateInstance()方法。这个方法我们在Remoting中也用过。它实际上是在本地或从远程创建对象类型,或获取对现有远程对象的引用。它的方法签名是:public static object CreateInstance(Type);(还有其他重载方法)注意它的返回值为object,MSDN对返回值的描述是: 对新创建对象的引用。 二是通过Assembly类的方法CreateInstance()。方法名和前一样,不过它不是静态方法。Assembly是在System.Reflection命名空间中。方法签名:public object CreateInstance(Type);(同样还有其他重载方法)返回值仍然是object,MSDN对返回值的描述是: 表示该类型的 Object 的实例,其区域性、参数、联编程序和激活属性设置为空引用(Visual Basic 中为 Nothing),并且 BindingFlags 设置为 Public 或 Instance,或者设置为空引用 (Nothing)(如果没有找到 typeName)。

Segmentation fault(Core Dump)

半世苍凉 提交于 2020-04-04 01:13:44
Segmentation fault 这个提示还是比较常见的,这个提示就是段错误,这是翻译还是十分恰当的。 Core Dump 有的时候给我们呈现的翻译很有趣是”吐核“,但是实际上比较贴切的翻译是核心转储(是操作系统在进程收到某些信号而终止运行时,将此时进程地址空间的内容以及有关进程状态的其他信息写出的一个磁盘文件。这种信息往往用于调试),这个“吐核”的产生和王安博士有着一些关联,其实“吐核”这个词形容的很恰当,就是核心内存吐出来。 出现这种错误可能的原因(其实就是访问了内存中不应该访问的东西):   1,内存访问越界:     (1) 数组访问越界,因为下标出超出了范围。     (2) 搜索字符串的时候,通过字符串的结尾符号来判断结束,但是实际上没有这个结束符。 (3)使用strcpy, strcat, sprintf, strcmp,strcasecmp等字符串操作函数,超出了字符中定义的可以存储的最大范围。使用strncpy, strlcpy, strncat, strlcat, snprintf, strncmp, strncasecmp等函数防止读写越界。   2,多线程程序使用了线程不安全的函数。    3,多线程读写的数据未加锁保护。     对于会被多个线程同时访问的全局数据,应该注意加锁保护,否则很容易造成核心转储   4,非法指针     (1

C++四种强制转换

梦想的初衷 提交于 2020-03-30 02:37:35
C语言的强制转换为在数据面前之间加数据类型进行转换,即(目标数据类型)原数据类型。 c++ 为了更好的 区分强制转换的类型 ,达到 见其名知其意 的效果,共将强制转换分为四种,即 1、static_cast<目标数据类型>原数据类型 2、const_cast<目标数据类型>原数据类型 3、reinterpret_cast<目标数据类型>原数据类型 4、dynamic_cast<目标数据类型>原数据类型 解析 static_cast<>() 1)用于类层次结构中基类和派生类之间指针或引用的转换 进行上行转换(把派生类的指针或引用转换成基类表示)是安全的 进行下行转换(把基类的指针或引用转换为派生类表示),由于没有动态类型检查,所以是不安全的 2)用于基本数据类型之间的转换,如把int转换成char。这种转换的安全由开发人员来保证 3)把空指针转换成目标类型的空指针 4)把任何类型的表达式转换为void类型 注意:static_cast不能转换掉expression的const、volitale或者__unaligned属性。  static_cast:可以实现C++中内置基本数据类型之间的相互转换。 如果涉及到类的话,static_cast只能在 有相互联系的类型中进行相互转换, 不一定包含虚函数。 const_cast<>() cost_cast即用于强制转换 指针或者引用 的

day02_数据类型转换、运算符、方法入门

五迷三道 提交于 2020-03-17 07:54:13
day02 【数据类型转换、运算符、方法入门】 今日内容 数据类型转换 算数运算符 比较运算符 逻辑运算符 三元运算符 简单方法定义和调用 教学目标 理解数据类型的强制转换 理解数据类型的自动转换 了解ASCII编码表 理解int类型和char类型的运算原理 理解运算符++ --的运算方式 理解+符号在字符串中的作用 理解比较运算符 理解逻辑运算符 掌握三元运算符的格式和计算结果 了解方法的概念 掌握无返回值无参数方法的定义格式 了解方法定义的注意事项 第一章 数据类型转换 Java程序中要求参与的计算的数据,必须要保证数据类型的一致性,如果数据类型不一致将发生类型的转换。 1.1 自动转换 一个 int 类型变量和一个 byte 类型变量进行加法运算, 结果会是什么数据类型? int i = 1 ; byte b = 2 ; 运算结果,变量的类型将是 int 类型,这就是出现了数据类型的自动类型转换现象。 自动转换 :将 取值范围小的类型 自动提升为 取值范围大的类型 。 public static void main(String[] args) { int i = 1 ; byte b = 2 ; // byte x = b + i; // 报错 //int 类型和 byte 类型运算,结果是 int 类型 int j = b + i; System.out.println

C++中“强制转换”的四大天王

只谈情不闲聊 提交于 2020-03-17 06:32:28
RTTI RTTI概念 RTTI(Run Time Type Identification)即通过运行时类型识别,程序能够使用基类的指针或引用来检查着这些指针或引用所指的对象的实际派生类型。 RTTI机制的产生 为什么会出现RTTI这一机制,这和C++语言本身有关系。和很多其他语言一样,C++是一种静态类型语言。其数据类型是在编译期就确定的,不能在运行时更改。然而由于面向对象程序设计中多态性的要求,C++中的指针或引用(Reference)本身的类型,可能与它实际代表(指向或引用)的类型并不一致。有时我们需要将一个多态指针转换为其实际指向对象的类型,就需要知道运行时的类型信息,这就产生了运行时类型识别的要求。和Java相比,C++要想获得运行时类型信息,只能通过RTTI机制,并且C++最终生成的代码是直接与机器相关的。 我对Java的运行时类型识别不是很熟悉,所以查了一下相关资料:Java中任何一个类都可以通过反射机制来获取类的基本信息(接口、父类、方法、属性、Annotation等),而且Java中还提供了一个关键字,可以在运行时判断一个类是不是另一个类的子类或者是该类的对象,Java可以生成字节码文件,再由JVM(Java虚拟机)加载运行,字节码文件中可以含有类的信息。 typeid和dynamic_cast操作符 RTTI提供了两个非常有用的操作符

Go语言中基本数据类型初识

孤街醉人 提交于 2020-03-16 00:24:31
在Go语言中常用的基本数据类型有如下几种: 整型 浮点型 布尔类型 复数 字符串 整型 有符号 int8 int16 int32 int64 无符号 uint8 uint16 uint32 uint64 特殊整型 uint,32位操作系统就是uint32,64位操作系统就是uint64 int,32位操作系统就是int32,64位操作系统就是int64 uintptr,无符号整型,用于存放指针 注意:在使用 int 和 uint 类型时,不能假定它是32位或64位的整型,而是考虑 int 和 uint 可能在不同平台上的差异。 进制 // 程序入口 func main() { // age = "17" // fmt.Println("Hello World") // fmt.Print("isOK") // fmt.Printf("Age: %s", age)\n var a1 = 10 fmt.Printf("十进制:%d\n", a1) fmt.Printf("二进制:%b\n", a1) fmt.Printf("八进制:%o\n", a1) fmt.Printf("十六进制:%x\n", a1) // 直接定义八进制 a2 := 077 fmt.Printf("直接声明八进制:%d\n", a2) // 直接定义十六进制 a3 := 0x12321 fmt.Printf(

c#范型

主宰稳场 提交于 2020-03-11 08:20:36
泛型介绍: 范型类和范型方法同事具备 可重用性、类型安全和效率 ,这是非范型类和非范型方法无法具备的。 所谓范型,即通过参数化类型实现同一份代码上操作多种数据类型,范型编程是一种编程范式, 它利用“参数化类型”将类抽象化,从而达到更灵活的复用。 机制: C# 泛型类型替换是在运行时执行的,从而为实例化的对象保留了泛型类型信息。C#泛型代码在被编译为IL代码和无数据时,采用特殊的占位符来表示泛型类型,并用专有的IL指令支持泛型操作。而真正的泛型实例化工作以"on-demand"的方式,发生在JIT编译时。 举例: 泛型通常用与集合以及作用于集合的方法一起使用。.NET Framework 2.0 版类库提供一个新的命名空间 System.Collections.Generic ,其中包含几个新的基于泛型的集合类。建议面向 2.0 版的所有应用程序都使用新的泛型集合类,而不要使用旧的非泛型集合类,如 ArrayList 。 C#泛型编译机制: 第一轮编译时,编译器只为Stack<T>(栈算法)类型产生“泛型版”的IL代码与元数据-----并不进行泛型类型的实例化,T在中间只充当占位符 JIT编译时,当JIT编译器第一次遇到Stack<int>时,将用int替换“泛型版”IL代码与元数据中的T---进行泛型类型的实例化。 CLR为所有类型参数为“引用类型”的泛型类型产生同一份代码

js介绍及内容(1)

安稳与你 提交于 2020-03-07 07:04:04
1、js介绍 js全称 Javascript但不是Java ,是一门前台语言 Java是一种后台语言 js作者是布兰登艾奇, 前台语言:运行在客户端的。 后台语言:运行在后端的 跟数据库有关的。 2、能干什么? 页面特效,开发页面游戏,后台开发, 3、js和ECMAScript的关系 ES不是语言,是js的标准,我们学习js就得按es的标准学习 4、前端的三个层次 html结构层 css表现层 js行为层 5、js写在哪 因为js和php都是脚本语言,js写在script这个标签里,php写在<?php>标签里 6、变量 变量 可以改变的量,往往用英文字母代替变量,并且区分大小写, 变量的定义(声明)var+字母 vara 我声明了一个变量叫a 变量的用途:变量其实是一个容器,起到临时存储数据的作用。 通过=进行赋值,vara=12; 7、js语言的输出 alert()这是js中的一个方法 弹出框 console.log()浏览器控制台输出,用于代码测试 document.write()在浏览器中写出 8、js的注释 (1)单行注释// (2)多行注释/* */ 9、常量 不变的量 汉字 数字 往往当做值使用。出了数字之外 要带引号 红色的报错,说亚宁是一个变量,但是这个变玲没有声明 变量起名的规则 1不能使用汉字 2区分大小写 3不能特殊符号开头可以(_a)对 (-a)错 a3对

js开课了

五迷三道 提交于 2020-03-07 07:03:32
1.作者 布兰登·艾奇 2.js 是一门前台语言 前台语言:运行在客户端的 后台语言:运行在数据库的 3.业务:页面特效,开发页面游戏,后台开发。 4.关系: js和es的: es不是语言是js的标准 5.前端的三个层次:结构层,表现层,行为层。 6.js写在脚本里。js和php都是脚本语言,js写在script中。php写在<?php>标签里 7.变量:可以改变的量,往往用英文字母代替变量,并且区分大小写。 变量夫定义(声明):var加字母 变量的用途:变量其实是一个容器,起到临时存储数据的作用 通过=经过赋值 8.js语言的输出 alert()这是js中的一个方法 ·弹出框· console.log()控制台浏览器的输出,用于代码测试 document.write()在浏览器中写出出 9.JS的注释 单行注释// 多行注释/*。。。内容。。。*/ 10.常量 :不变的量 汉字,数字, 往往当作值使用。除了数字之外都要带引号 变量起名的规则:不能使用汉字 区分大小写, 不能特殊符号开头除了下划线- $ 带引号和不带引号 带引号的 是什么就输出什么,叫字符串 变量不是,变量输出的是它后面的值,如果没有赋值undefined js 的关键字:var 11.js 的四则运算 + 纯数字之间的就是加法 字符串之间就是拼接 - 纯数字是减法 和字符串之间 还是减法 * 纯数字是乘法

数据类型转换、运算符

霸气de小男生 提交于 2020-03-05 12:22:30
【数据类型转换、运算符】 内容 数据类型转换 算数运算符 比较运算符 逻辑运算符 三元运算符 第一章 数据类型转换 Java程序中要求参与的计算的数据,必须要保证数据类型的一致性,如果数据类型不一致将发生类型的转换。 1.1 自动转换 一个int 类型变量和一个 byte 类型变量进行加法运算, 结果会是什么数据类型? int i = 1; byte b = 2; 运算结果,变量的类型将是 int 类型,这就是出现了数据类型的自动类型转换现象。 自动转换 :将 取值范围小的类型 自动提升为 取值范围大的类型 。 1 public static void main(String[] args) { 2 int i = 1; 3 byte b = 2; 4 // byte x = b + i; // 报错 5 //int类型和byte类型运算,结果是int类型 6 int j = b + i; 7 System.out.println(j); 8 } 转换规则 范围小的类型向范围大的类型提升, byte 、short、char 运算时直接提升为 int 。 byte、short、char‐‐>int‐‐>long‐‐>float‐‐>double 1.2 强制转换 强制类型转换 :将 取值范围大的类型 强制转换成 取值范围小的类型 。        比较而言