- c#是强类型语言,对变量的类型要求很严格,如果是整数,就用int表示,如果是字符串就用string表示等等;因此每个变量和对象都必须具有声明的类型。它要求所有的变量都必须先定义后使用,相对而言JavaScript语言属于弱类型语言,它在声明变量时,不管什么类型,统一用var关键字。在此不做介绍。
- c#语言的数据类型有两种:值类型和引用类型。值类型放在内存栈中,而引用类型放在内存队中;在内存中存放的内容也是不一样的,值类型存放的是变量本身,而引用类型存放的是变量的引用。
打个比方:值类型相当于现金,拿出来就可以花,引用类型相当于银行卡,必须拿着银行卡去取出钱,然后花,所以值类型比引用类型执行的更快一点。
言归正传:
C#值类型
c#值类型有以下三种
- 简单类型(Simple types)
- 结构类型(struct types)
- 枚举类型(Enumeration types)
1.简单类型
整型,布尔型,字符型,浮点型,小数型
- 整型: c#中有9个整型:sbyte,byte,short,ushort,int,uintlong,ulong,char;
int popstar = 8;
- 布尔型: 布尔类型有两个值:true和false,
bool popstar = true; //定义一个布尔类型的变量并赋值为true bool popstar1 = (1 < 2); //定义一个布尔类型的变量并为之赋值,它的值是表达式(1<2)的结果
- 字符型:字符型为一个单Unicode字符,一个Unicode字符16位长。
char popstar='p'; //给一个字符变量赋值
- 浮点型:有两种类型:float和double;它们的差别在于取值范围和精度,当一个表达式中有一个值是浮点型时,所有其他的类型都要转换为浮点才可以计算。
- 小数型:当定义一个变量并赋值时,使用m后缀来表明她是一个小数型。
decimal popstar = 1.2m;
2.结构类型
一个结构类型可以声明构造函数,常数,字段等。尽管列出来的功能像一个类一样,但结构是值类型,类是引用类型。使用结构的主要思想是创建小型的对象,我的 理解便是:其实结构和类的作用是一样的,只不过如果内容(字段,方法)太多的时候,我们使用类,因为类是引用类型,我们可以将这个类放在别处,用的时候 拿进来,很方便;相反,如果内容(字段,方法)较少的时候便可以使用结构体,因为我们不需要引用了,直接和主体函数放在一块就ok。
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication3 { struct popstar { public string firstname; //姓字段 public string secondname; //名字段 public popstar(string m, string n) //构造函数 { firstname = m; secondname = n; } } class Program { static void Main(string[] args) { popstar p = new popstar("张", "三"); Console.WriteLine(p.firstname+p.secondname); Console.ReadKey(); } } }
输出结果:张三
3.枚举类型
是一个由指定常量集合组成的独特类型;
(1)默认情况下,枚举元素是int型,且第一个元素为0,每一个连续的元素按1递增。
enum MonthNames { January,February,March,April}; //定义一个枚举,包含1-4月
(2)如果想给第一个元素赋值,可以按如下方式设置为1:
enum MonthNames { January=1,February,March,April}; //定义一个枚举,包含1-4月
(3)如果想给每一个赋值也可以-可以使相同的值,但元素名不可以相同
enum MonthNames { January=23,February=2,March=33,April=2}; //定义一个枚举,包含1-4月
class Program { static void Main(string[] args) { Console.WriteLine((int)MonthNames.January); Console.ReadKey(); } }
(4)也可以使用不同于int的数据类型
enum MonthNames:byte { January=2,February=33,March=23,April=33}; //定义一个枚举,包含1-4月
不过枚举使用的类型仅仅限于long 、int、short、byte.
C#引用类型
在C#中引用类型包括:
- 对象类型;
- 类类型;
- 接口;
- 字符串类型;
- 数组;
1.对象类型
对象类型是所有类型之母,她是其他类型最根本的基类,所以可以把任何类型的值付给它。
object popstarInt = 123; //将整型赋给object变量 object popstarChar = 'p'; //将字符型赋给object变量 object popstarString = "popstar"; //将字符串赋给object变量 object popstarBool = true; //将bool值赋给object变量
2.类类型
类(class)类型是一个很神奇的类型,主要有属性和方法两个元素。属性就是这个类包含的一些数据类型的变量,方法是这个类包含的动作。
类还有构造函数和析构函数,构造函数是用来开辟一块内存来存放类的实例,析构函数是用来把这块内存销毁。下面是一个简单的用户类:
public class User { string username; //用户名 int age; //姓名 bool sex; //性别 public string Getusername() { return username; } }
在此只简单地介绍类类型,面向对象后面还要详细学习。
3.接口
接口:就是仅仅声明了但没有去实现,相当于一片文章的大纲,但没有具体内容。每个人都可以用这个大纲写进自己的内容。接口就是为了规范化,将大纲统一起来。
对于程序猿呢,就可以使用接口中统一的方法名,去实现各自不同功能的方法。
一个接口可以派生多个类,一个类也可以继承于多个接口,但一个类只可以有一个基类。接口简单使用如下:
1 interface Iface 2 { 3 string GetMyName(); 4 } 5 class popstar :Iface 6 { 7 string popstarName = "popstar"; 8 public string GetMyName() 9 { 10 return popstarName; 11 } 12 } 13 class Program 14 { 15 16 static void Main(string[] args) 17 { 18 popstar people = new popstar(); 19 Console.WriteLine(people.GetMyName()); 20 21 Console.ReadKey(); 22 }
4.字符串类型
字符串数据类型当然是用来保存字符串的。它继承自object,而且是被密封的。
string myName = "popstar"; //声明一个字符串类型的变量并为其赋值 string add = "I" + "love" + "you"; //将三个字符串合并为一个字符串赋给add char p = add[0]; //取出add字符串中的第一个字符赋给p字符变量 Console.WriteLine(p);
5.数组类型
数组是可以容纳多个元素的类型,但是容纳的元素必须是同一种类型,如定义了一个int[]的数组,则数组里面只能存放int型的元素。
数组一个比较重要的概念就是“维数”,定义数组的方法有以下几种:
int[] intArr = {1,12,2}; int[] intArr1 = new int[] { 1,1,1,11,2,2}; //不定长 int[] intArr2 = new int[3] { 1,2,3}; //定长 int[,] intArr3 = new int[,] { {1,1,3},{2,2,3}}; //不定长 int[,] intArr4=new int[2,2]{{1,1},{2,2}}; //定长