C#数据类型汇总
通用类型系统
C#中,变量是值还是引用仅取决于数据类型
所有的数据类型都是对象。因为它们具有自己ide方法和属性
int
int_value = 101;
int_value = 101;
//调用*int_value*的比较方法与整型*2*进行进行比较
int_value.CompareTo(2);
//在控制台输出
Console.WriteLine(int_value.ToString());
值类型
内置值类型
整型
sbyte(System.SByte)
short(System.Int16)
int(System.Int32)
long(System.Int64)
byte(System.Byte)
ushort(System.UInt16)
uint(System.UInt32)
ulong(System.UInt64)
char(System.Char)
浮点型
float (System.Single)
double(System.Double)
高精度类型
- decimal(System.Decimal)
bool(System.Boolean)
用户定义的值类型
结构体类型(派生于System.ValueType)
枚举类型结构体类型(派生于System.Enum)
可空类型结构体类型(派生于System.Nullable泛型结构体)
C#的所有值类型均隐式派生自System.ValueType;
判断是否为值类型
Type.IsValueType
引用类型
数组(派生于System.Array)
用户可以自定义的引用类型
类:class(派生于System.Object)
接口:interface
委托类型:delegate(派生于System.Delegate)
字符串:string(System.String的别名)
Lambda表达式
数组类型
值类型数组
int[]
int_array = new int[10];
int_array = new int[10];
在堆内存中一次初始化10个int类型的存储空间
自动初始化这10个元素
将10个元素存储到刚刚分配的内存空间内
引用类型数组
object[]
obj_array = new object[10];
obj_array = new object[10];
在堆内存中分配一次空间
不会自动初始化任何元素
obj_array[i]都是null
当有代码初始化某个元素时,对应元素的存储空间会分配在堆内存上
obj_arr[i]=new
object();
内存部署
堆内存上存储了所有的引用类型
object
item = new objct();
item = new objct();
new关键字在堆内存中分配内存空间,并且返回该内存空间的地址item存储分配后返回的内存地址
语法
结构体
关键字struct定义
public struct LORect
{
private float x;
private float y;
private float width;
private float height;
}
构造函数
public LORect(float x,float y,float width,float height)
{
this.x = x;
this.y = y;
this.width = width;
this.height = height;
}
- 不允许重载无参构造函数
属性
public float X{
set{
this.x = value;
}
get{
return this.x;
}
}
定义变量
LORect
frame = new LORect(0f,0f,100f,100f);
frame = new LORect(0f,0f,100f,100f);
枚举
关键字enum定义
public enum LOControlType
{
LOControlTypeNormal = 0,
LOControlTypeHighlight = 1,
LOControlTypeDisable = 2,
}
定义变量
LOControlType
type = LOControlType.LOControlTypeNormal;
type = LOControlType.LOControlTypeNormal;
类
父类
关键字class定义
public class LOPerson { private
string name; private int age; }
构造函数
public
LOPerson(){}public
LOPerson(string name){this.name = name;}public
LOPerson(string age){this.age = age;}多个参数的构造函数
public LOPerson(string name,int
age) { this.name = name; this.age = age; }
自定义函数
public void SayHi()
{
Console.WriteLine (this.name + “: Hello”);
}
析构函数
~LOPerson()
{
this.name = null;
this.age = 0;
}
在析构函数中,将引用类型成员变量置为null,内存处理
在析构函数中,将值类型成员变量置为默认值,程序逻辑安全
子类
关键字class定义
public class LOStudent:LOPerson
{
private float score;
}
构造函数
基于父类无参的构造函数
public LOStudent(float score):base() { this.score = score; }public
LOStudent(int age):base(age){}在构造函数的继承中,都会先调用父类的构造函数
自定义函数
public void SayHello()
{
base.SayHi();
Console.WriteLine (“this.SayHi”);
}
- 在自定义函数中,调用父类的某个函数要用到base关键字
析构函数
~LOStudent()
{
this.score = 0f;
}
子类和父类的析构函数的执行顺序
1.自动调用子类的析构函数
2.自动调用父类的析构函数
不需要特别语法指名
特性
关键字Attribute定义
[AttributeUsage(AttributeTargets.Property)]
public class LOTypeAttribute:Attribute
{
public string Type{set;get;}
}
特性的用法
public class LOPeople
{
[LOType(Type=“NoHealthy”)]
public string hobby{set;get;}
}
获取特性的值
PropertyInfo item = property_list[0];
LOTypeAttribute attribute = (LOTypeAttribute)Attribute.GetCustomAttribute(item,typeof(LOTypeAttribute));
Console.WriteLine (attribute.Type);
反射
命名空间
using
System.Reflection;
System.Reflection;
获取Type
LOPeople people = new LOPeople();
people.hobby = “Smoke”;
Type p_type = people.GetType();
属性(PropertyInfo)
获取属性列表
PropertyInfo[]
property_list = p_type.GetProperties();
获取指定属性
PropertyInfo
property = p_type.GetProperty(“hobby”);
方法
获取people对象的属性值 .
GetValue()property.GetValue(people,null);
设置people对象的属性值 .
SetValue()property.SetValue(people,”Drink”,null);
方法(MethodInfo)
获取方法列表
MethodInfo[]
method_list = p_type.GetMethods();
获取指定方法
MethodInfo
method = p_type.GetMethod(“SayHi”);
方法调用
Invoke()
方法的参数列表
method.GetParameters();
方法的返回值
method.ReturnType;
成员(MemberInfo)
获取成员列表
MemberInfo
member_list = p_type.GetMembers();
获取指定成员
MemberInfo[]
member= p_type.GetMember(“name”);
构造函数(ConstructorInfo)
获取构造函数列表
ConstructorInfo[]
constructor_list = p_type.GetConstructors();
获取指定构造函数
ConstructorInfo
constructor = p_type.GetConstructor(new Type[]{typeof(int)});
委托
关键字delegate
public
delegate void LODataSource(List<int> data_list);
delegate void LODataSource(List<int> data_list);
定义委托类型变量
LODataSource
dataSource;
dataSource;
委托类型变量赋值
Lambda表达式赋值
dataSource = (List<int> data_list)=>{
foreach (int item in data_list)
{
Console.WriteLine (item.ToString());
}
} ;
函数地址赋值
void ProcessData(List<int> data_list)
{
foreach (int item in data_list)
{
Console.WriteLine (item.ToString());
}
}
dataSource
= new LODataSource(ProcessData);dataSource
= ProcessData;
接口
关键字interface
public interface LOInterface{
void SayNice();
}
接口中只能声明函数,不能实现函数
接口的用法
public class LOTeacher:LOInterface{
private string name;
public void SayNice()
{
Console.WriteLine (this.name + “: Nice”);
}
}
public class LOManager:LOInterface{
private string name;
public void SayNice()
{
Console.WriteLine (this.name + “: Nice”);
}
}
接口的好处
为多个不同的类提供相同名称的方法接口,提供不同的实现过程
C#数据类型汇总的更多相关文章
- day 7 - 1 集合、copy及基础数据类型汇总
集合:{},可变的数据类型,他里面的元素必须是不可变的数据类型,无序,不重复.(不重要)集合的书写 set1 = set({1,2,3}) #set2 = {1,2,3,[2,3],{'name':' ...
- Django Models的数据类型汇总
https://blog.csdn.net/devil_2009/article/details/41735611 Django Models的数据类型 汇总 AutoField IntegerFie ...
- 基础数据类型汇总补充;集合set ;深浅copy
首先回顾: 小数据池:int -5~256str 特殊字符,*数字20 ascii : 8位 1字节 表示1个字符unicode 32位 4个字节 表示一个字符utf- 8 1个英文 8位,1个字节 ...
- 基础数据类型汇总补充,python集合与深浅拷贝
一.基础数据类型汇总补充 1.查看str所有方法方式 2.列表:在循环中删除元素,易出错或报错(飘红) lis = [11,22,33,44,55] # for i in range(len(lis) ...
- MySQL学习笔记(二):MySQL数据类型汇总及选择参考
本文主要介绍了MySQL 的常用数据类型,以及实际应用时如何选择合适的类型. ******几个通用的简单原则:******* 1. 更小的通常更好.但是要确保没有低估需要存储的值的范围,如果无法确定 ...
- python 基础数据类型汇总
数据类型小结(各数据类型常用操作) 一.数字/整型int int()强行转化数字 二.bool类型False&True bool()强行转化布尔类型. 0,None,及各个空的字符类型为Fal ...
- mysql的数据类型汇总
数字型 类型 大小 范围(有符号) 范围(无符号) 用途 TINYINT 1 字节 (-128,127) (0,255) 小整数值 SMALLINT 2 字节 (-32 768,32 767) (0, ...
- python基础数据类型汇总
list和dict 在循环一个列表和字典时,最好不要删除其中的元素,这样会使索引发生改变,从而报错! lis = [11, 22, 33, 44, 55] for i in range(len(lis ...
- Java最常用的变量定义汇总
Java最常用的数据类型有基本数据类型,字符串对象,数组,基本数据类型又分为:数值型(包括整形和浮点型),字符型,布尔型,下面用一个简单的程序把这些数据类型汇总一下 public class Java ...
随机推荐
- Java的多线程(上)
多线程的优点和必要性是不言而喻的. 三种方法实现多线程 1. 继承Thread class A extends Thread{ public void run() {...} } 使用时, new A ...
- jQuery.holdReady()方法用法实例
调用此方法可以延迟jQuery的ready事件,也就是说尽管文档已经加载完成,也不会执行ready事件处理方法.可以多次调用jQuery.holdReady()方法,以延迟jQuery的ready事件 ...
- motan源码分析一:服务发布及注册
motan是新浪微博开源的服务治理框架,具体介绍请看:http://tech.sina.com.cn/i/2016-05-10/doc-ifxryhhh1869879.shtml. 本系列的文章将分析 ...
- 新版福昕阅读器(Foxit Reader)启动速度慢解决办法
新版福昕阅读器(FoxitReader)启动速度慢解决办法之前喜欢使用福昕阅读器的原因就是看中了其小巧,可是最近版本的阅读器打开速度变得慢了很多(不是电脑配置问题),比AdobeReader还要慢,这 ...
- Java虚拟机内存区域堆(heap)的管理
在上一节中Java 出现内存溢出的定位以及解决方案 中对于Java虚拟机栈以及方法区的内存出现的异常以及处理方式进行了解析,由于Java虚拟机对于堆的管理十分复杂,并且Java虚拟机中最基本的内存区域 ...
- TinyXml快速入门(二)
在<TinyXml快速入门(一)>中我介绍了使用TinyXml库如何创建和打印xml文件,下面我介绍使用tinyxml库对xml文件进行一系列的操作,包括获取xml文件声明,查询指定节点. ...
- [转] Makefile的条件执行
条件语句可以根据一个变量的值来控制make执行或者忽略Makefile的特定部分.条件语句可以是两个不同变量.或者变量和常量值的比较.要注意的是:条件语句只能用于控制make实际执行的makefile ...
- Linux 机器之间建立互信
原理: 就是两台机器(web-1和web-2)经过预先设置好经过认证的key文件,双方互相访问时,进行自动认证,从而实现互信. 互信的原理了解了,我们可以把配置ssh互信的步骤进行有效的分割. 1 ...
- sql 删除多项
delete from 表名 where 字段 in(值,值,值.......)
- (转)html5 Placeholder属性兼容IE6、7方法
使低版本浏览器支持Placeholder有很多方法,都不是很完美,或多或少有点问题,且有些原生支持的浏览器在获得焦点时会清空Placeholder提示.发现zhihu的解决方法不错,特记录下 wind ...