c#重点[数据类型,构造方法,变量,变量,运算符,装箱,拆箱]
1.命名规范
- 类 :名词 每个单词的首字母大写 Dog Student PersonClass
- 字段:首个字母小写,如果有多个单词,后面的单词首字母大写
string name=""
string sMyString=""
- 方法:动词 每个单词的首字母大写 Cry SayHi
2.vs版本
vs2015 .net4.6
vs2013 .net4.5.1
vs2012 .net4.5
vs2010 .net4.0
vs2008 .net3.5
vs2005 .net3.0
vs2003 .net2.0
高版本可以兼容低版本,低版本不可以兼容高版本
如果要在2008里面打开2013版本的项目,只要更改一下项目属性的.net版本,重新生成一下即可。
3.数据类型
包括数值类型和引用类型
- 数值类型:计算机最小的信息单位byte(字节),一个字节八位(bit),一个字母一个字节,一个汉字两个字节。
2. 引用类型:【数组,对象,string,object】
引用类型的变量又称对象,C#有两个内置的引用类型:object类型和string类型,object是所有类型的父类,可以将任何类型的赋值赋给object类型的变量。string是字符串类型,字符串对象一旦创建,内容就不可以更改,它是不可变的。
值类型和引用类型的区别:
eg:
我们编译之后,这些变量都是存储于数据,由CPU处理,内存里面怎么存储数据呢?内存里面有两个区域:一个栈区域和一个堆区域,我们看一下它们的工作原理和区别
值类型:所有的值类型都是存储于栈里面
首先int iNum1 = 10的时候,它会在栈里面开辟一个名为iNum1的内存空间值为10,int iNum2 = iNum1;它又会在栈里面开辟一个iNum2的内存空间其值为 iNum1的值,所以iNum2的值 为10。
【值类型的赋值就是值的拷贝】,所以iNum2等于10,iNum1重新赋值为20;iNum1的内存空间值则变为2。
引用类型:[对象也是引用类型]
首先string sString1 = "aaa";时,它会在栈里面开辟一个名为sString1的内存空间,但它的却是存在堆里面的【引用类型的值存储于堆里,它会返回一个引用地址/指针给栈】,就好比栈里面返回的引用 地址是家庭地址,通过地址我们就可以找到人一样;
当string sString2 = sString1;时,又会在栈里面开辟一个名为sString2的内存空间,[引用类型的赋值就是地址的拷贝],所以它的地址等于sString1的地址=引用地址1指向"aaa";
当sString1 = "bbb";时,[一个字符串,一旦被创建之后,它就不会在堆里面修改],所以它会重新开辟一个空间,sString1的地址就会变成引用地址2指向"bbb",所以sString2的值为"aaa"。
4.构造方法
例如: 我们自己定义一个构造方法
class Person
{
public string name = "";
public int age = ;
public static int i=0;
public Person (string name,int age)
{
this.name = name;//this表示当前对象
this.age = age;
}
public void SayHi(string name,int age)
{
Console.WriteLine(string.Format("hello,我叫{0},今年{1}岁",name,age));
}
}
如果在Program里面实例化对象就会出现以下错误:
因为[每个类都有一个默认的无参构造方法],如果不写构造方法的话,默认情况下它就会调用默认的这个无参的构造方法,再去创建对象时,它就会调用不到,默认是写的构造参数,如果想去调用的话,一 定要在重新写一个无参构造方法public person(){}。
[调用类里面所有的非静态成员,要通过类的对象去调用]
这个运行的过程1首先调用这个构造方法,把它传进来的name,age给成员变量(字段)
以上程序中, Person p1=new Person("张三",20);是怎么在堆栈里运行的?详解见7
5.全局变量.局部变量
全局变量:类的里面,方法的外面,也叫成员变量
局部变量:方法里面定义的,只在方法里面用
6.静态和非静态
通过关键字static区分静态和非静态
怎么区分?
非静态:假如我想得到某个学生的文具盒,我们不能直接去拿,则是通过学生这个对象去拿。[不能通过类直接去调用]
静态:教室里面还有一些黑板,水桶等一些公共的东西,这个则可以通过类去拿[可以通过类直接去调用]
7. 程序在内存里面怎么存放的.
当实例化一个类的对象时,那么在这个类里面所有非静态的成员(字段和方法)全都生成一次
方法不是直接存取的,方法在内存里单独有一个方法区,用于存放方法,方法是通过方法引用地址去指向
实例化一个对象时,类里面所有的成员,不管什么类型都存于堆里(SayHi(string name,int age)中,又有值类型?又有引用类型?)
学习中,如果遇到类似情况,"未将对象引用到对象的实例?"
那一定是"Person p1=Null"它的值为空/通过p1调用这个类没有在内存里面开辟内存空间/没有实例化对象/没有在堆里创建name,age,所以无法调用。
"Person p2=new Person("李四",22);"又开辟一个空间,当创建一个对象时,它会先在堆里面扫描之前有没有创建,如果有的话,会把类里面非静态的成员作为一个模板直接拷贝。结果返回到栈里。
person.i?为什么调用不会出错呢?
因为i根本不存在于堆里面,所有的静态内容都是存在于一个静态区里面,包括方法,字段。在声明变量的时候它已经存到里面了。
8.装箱,拆箱[尽量避免装箱和拆箱]
装箱:值类型转换为引用类型
eg:
int i = ;
Console.WriteLine(i.ToString());
拆箱:引用类型转为值类型
eg:
string s = "";
Console.WriteLine(Convert.ToInt32(s));//转为int类型
string d = "10.24";
Console.WriteLine(Convert.ToDouble(d));//转为double类型
注:装箱和拆箱在处理大量数据的时候会造成系统缓慢,耗用系统资源,在开发中尽量避免装箱和拆箱. 避免的处理办法使用泛型方法.
9.数据类型转换:显式转换和隐式转换
隐式转换:低精度转高精度,直接转。
int i = ;
Convert.ToDouble(i);
显示转换:高精度转换为低精度,由于数据的差异,有可能丢失部分数据。
double d = 10.23;
int i=Convert.ToInt32(d);
10.c#中的运算符
10.1.算术运算符
+(加)、-(减)、*(乘)、/(除)和%(取余数)五个二元运算符和++(自增,执行之后才加)、- -(自减,执行之后才减)两个一元运算符++(自增,加了之后运行)、- -(自减,减了之后运行)的用法
int a = ;
int b = ;
int c, d;
long e, f;
int i;
c = a * b / b;
d = a / b * b;
e = (long)a * b / b;
f = (long)a / b * b;
i = a % b;
Console.WriteLine(c);
Console.WriteLine(d);
Console.WriteLine(e);
Console.WriteLine(f);
Console.WriteLine(i);
结果:
10.2.赋值运算符
注意:a.*赋值运算必须是类型兼容的,即左边的变量必须能够接受右边的表达式的值,否则会产生编译错误。
b.如果是对象赋值,则称为引用赋值。将右边对象的引用值(地址)赋给左边的变量,这样,两个变量地址相同,即指向同一对象
10.3.关系运算符
==,!=,<,>,<=,>=
10.4.逻辑运算符:&&(并且,一个为false,则全为false)、||(或者,一个为True,则全为True)
int x = ;
int y = ;
int z = ;
bool u = false;
u = !((x >= --y || y++ < z--) && y == z);
Console.WriteLine(u); y = ;
u = !((x >= --y | y++ < z--) & y == z);
Console.WriteLine(u);
结果为:True、 False。
10.5优先级
从高到低:一元运算符----二元运算符---关系运算符----逻辑运算符-----赋值运算符
11.string
11.1.字符串恒定性
1) 字符串我们可以看成是一个字符数组。
2) str.Length表示字符串里面字符的个数。
3) 字符串对象一旦被创建,这个对象就不能被修改。
4) 在创建一个字符串对象的时候,会先去字符串数据池(在堆中)寻找是否有相同的字符串内容的对象,如果有,就直接让变量指向这个对象,如果没有,就创建新的对象。
11.2.字符串常用方法
1)Equals方法:判断两个字符串是否相同, 如果相同返回值为true,否则为false
2)定位字符串:
3)截取字符串:substring
4)插入和填充字符串
Ⅰ.insert方法
string str1 = "hi";
string str2 = "world";
string str3=str1.Insert(,str2);
Console.WriteLine(str3);
Ⅱ.PadLeft/PadRigth方法
string s = "hi";
Console.WriteLine(s.PadLeft(, '@'));
Console.WriteLine(s.PadRight(, '@'));
daima
结果:
5)删除和剪切字符串Remove方法
Ⅰ.Remove方法
Remove(开始删除的位置,删除的数量)
string s = " hii";
Console.WriteLine(s.Remove(, ));
Remove
Ⅱ.Trim、TrimStart(去掉前面的空格)、TrimEnd(去掉后面的空格)方法
Trim在c#中的两种用法:去前后空格和传一个数组过滤。
char [] ch1={'@','#','$'};
string s1="@China#$";
string s2 = s1.Trim(ch1);
Console.WriteLine(s2);
c#Trim用法
Ⅲ. CopyTo方法:将一个字符串复制到数组里面去
CopyTo(要目标的目标位置,目标数组,指定目标中开始存放的位置,要复制的字符个数)
string s1 = "China";
char [] ch1=new char[];
s1.CopyTo(,ch1,,);
Console.WriteLine(ch1);
CopyTo
6)替换字符串Replace方法
string s1 = "he";
string s2 = s1.Replace("e","l!");
Console.WriteLine(s2);
Replace
7)Format方法:string.Format();把一个内容传到字符串里面去{0}是占位符
字符串变量传值:
string s1 = "a";
string s2 = "b";
string s = string.Format("大家好,小明今年{0}岁,小王今年{1}岁", s1, s2);
将S1的值传递给{0},S2的值传递给{1},整合成一个新的字符串赋值给S
11.3 字符串拼接StringBuilder
string在堆中运行,string s1="hi"被创建之后,就不会更改,则它会另辟空间,它就会占用太多空间。stringBuilder如图
stringBuilder引入的命名空间:using System.Text;
创建一个stringBuilder对象[stringBuilder sb=new stringBuilder()]。
c#重点[数据类型,构造方法,变量,变量,运算符,装箱,拆箱]的更多相关文章
- Java八种基本数据类型的大小,以及封装类,自动装箱/拆箱的用法?
参考:http://blog.csdn.net/mazhimazh/article/details/16799925 1. Java八种基本数据类型的大小,以及封装类,自动装箱/拆箱的用法? 原始类型 ...
- Java ——Number & Math 类 装箱 拆箱 代码块
本节重点思维导图 当需要使用数字的时候,我们通常使用内置数据类型,如:byte.int.long.double 等 int a = 5000; float b = 13.65f; byte c = 0 ...
- Java中的自动装箱拆箱
Java中的自动装箱拆箱 一.自动装箱与自动拆箱 自动装箱就是将基本数据类型转换为包装类类型,自动拆箱就是将包装类类型转换为基本数据类型. 1 // 自动装箱 2 Integer total = 90 ...
- JDK5.0新特性(静态导入、自动装箱/拆箱、增强for循环、可变参数、枚举、泛形)
JDK5中新增了很多新的java特性,利用这些新语法可以帮助开发人员编写出更加高效.清晰,安全的代码. 这些新特性主要有:1.静态导入2.自动装箱/拆箱3.增强for循环4.可变参数5.枚举6.泛型7 ...
- Java的自动装箱/拆箱
概述 自JDK1.5开始, 引入了自动装箱/拆箱这一语法糖, 它使程序员的代码变得更加简洁, 不再需要进行显式转换.基本类型与包装类型在某些操作符的作用下, 包装类型调用valueOf()方法将原始类 ...
- 6个重要的.NET概念:栈,堆,值类型,引用类型,装箱,拆箱
引言 本篇文章主要介绍.NET中6个重要的概念:栈,堆,值类型,引用类型,装箱,拆箱.文章开始介绍当你声明一个变量时,编译器内部发生了什么,然后介绍两个重要的概念:栈和堆:最后介绍值类型和引用类型,并 ...
- JAVA的自动装箱拆箱
转自:http://www.cnblogs.com/danne823/archive/2011/04/22/2025332.html 蛋呢 的空间 ??什么是自动装箱拆箱 基本数据类型的自动装箱(a ...
- Java 装箱 拆箱
Java 自动装箱与拆箱 ??什么是自动装箱拆箱 基本数据类型的自动装箱(autoboxing).拆箱(unboxing)是自J2SE 5.0开始提供的功能. 一般我们要创建一个类的对象的时候,我 ...
- java(17) - 增强for循环、装箱拆箱、可变参数
一.增强型for循环: 语法格式: 打印: A B C D E 当遍历集合或数组时,如果需要访问集合或数组的下标时,最好使用旧的方法来便利或循环,而不要用增强型for循环,因为它丢失了下标信息. 对于 ...
- Java之集合初探(二)Iterator(迭代器),collections,打包/解包(装箱拆箱),泛型(Generic),comparable接口
Iterator(迭代器) 所有实现了Collection接口的容器都有一个iterator方法, 用来返回一个实现了Iterator接口的对象 Iterator对象称作迭代器, 用来方便的实现对容器 ...
随机推荐
- MPEG2/TS 包结构简述
TS 包由以下3部分组成: 包头: 4字节, 同步,识别,检错和加密用 自适配域:可选 包数据:最大184字节(不存在自适配域) 4字节 184字节 包头 自适配域 包数据 4字节包头结构: 1字节 ...
- UDP"打洞"原理
1. NAT分类 根据Stun协议(RFC3489),NAT大致分为下面四类 1) Full Cone 这种NAT内部的机器A连接过外网机器C后,NAT会打开一个端口.然后外网的任何发到这个打开的端口 ...
- 一次流量稍高导致web项目慢的问题&解决
项目上线后,用户越来越多,有一天出现一个issue:用户访问特别慢. 首先介绍下架构: haproxy/Nginx / \ node1 node2 | | redis redis(slave) | | ...
- Microsoft.CSharp.CSharpCodeProvider
Microsoft.CSharp.CSharpCodeProvider MSDN 提供对 C# 代码生成器和代码编译器的实例的访问.类提供可用来检索 C# ICodeGenerator 和 ICode ...
- 关于"The dependency was added by the project system and cannot be removed" Error
阅读一个简单地工程代码,其中一个工程BaseCode是 static lib,另一个工程RunBaseCode使用该lib,但在工程设置的“Linker\Input\AdditionalDepende ...
- [转]LINQ之路系列博客导航
分享一个学习Linq的好博客:Linq之路
- Unity3d游戏中自定义贝塞尔曲线编辑器[转]
关于贝塞尔曲线曲线我们再前面的文章提到过<Unity 教程之-在Unity3d中使用贝塞尔曲线>,那么本篇文章我们来深入学习下,并自定义实现贝塞尔曲线编辑器,贝塞尔曲线是最基本的曲线,一般 ...
- 重构第3天:方法提公(Pull Up Method)
理解:方法提公,或者说把方法提到基类中. 详解:如果大于一个继承类都要用到同一个方法,那么我们就可以把这个方法提出来放到基类中.这样不仅减少代码量,而且提高了代码的重用性. 看重构前的代码: usin ...
- sql like 时间
and Convert(varchar(),TimeStamp,) like '%2013-09-06 09:46:03%'
- C#基础总结之四List-Hashtable-冒泡排序
#region 第四天作业 名片--------ArrayList //ArrayList card = new ArrayList(); //card.Add("2202111001122 ...