C#基础——类型

命名空间

using System
namespace spacename
{class c1
	{members}
	class2
	{members}
	......
}

命名空间由namespace关键字定义,其他程序可以引用该命名空间,引用方式也为使用using语句。使用using语句可以从基类库中引用已有的库。

格式化输出

Console.WriteLine("Hello world!");  // output a string with enter
Console.Write("Hello world!");  // output a string without enter
// use placeholder
Console.WriteLine("{0}+{1}+{2}={3}",10,20,30,60)  // output 10+20+30=60
Console.WriteLine("{1}+{0}+{2}={3}",10,20,30,60)  // output 20+10+30=60
// use placeholder and formatted symbol
Console.WriteLine("{0:c}+{1:d6}+{2:f3}={3:E}",10,20,30,60)  // output $20+000010+30.000=6.000000E+001

格式化符号有:

符号 含义
C/c 格式化货币
D/d 格式化十进制数,还可制定最小填充位数,前补零
E/e 指数记数法,大小写均转换,显示输入的模样
F/f 小数记数法,保留小数位数
G/g 格式化为定点或指数格式
N/n 基本的数值化,带逗号
X/x 转化为十六进制,输入X显示X,输入x显示x

变量、常量

C#是大小写敏感的,命名约定有两种:
PascalCase:重要且高级,如Console/WriteLine()
camelCase:次要且低级,如int/struct

变量的种类

C#中有静态变量非静态变量数组元素值参数引用参数输出参数数组参数局部变量八种类别,没有全局变量

class Program  // class
{
	int x=1;  // x is non-static variable
	public static int y=2;  // y is static variable
	void f(int[] s,int val,ref int i,out int j)  // array s, value parameter val, reference parameter i, output parameter j
	{
		int w=2;  // w is local variable
		j=x+y+i+w;  // j is output variable
	}
	static void Main()
	{}
}

规则:

  1. 只能在类型中定义静态变量,不可在函数中定义
  2. 静态成员不可访问非静态成员;非静态成员可以访问静态成员
  3. 类内调用,可以直接调用;类间调用,使用点运算符
  4. 静态变量生存周期为源程序(类似 全局变量 );非静态变量生存周期为一个函数调用过程

局部变量:在独立块中定义和使用的变量,只在该范围内有效,不会被自动初始化,没有默认值

常量

modifier const type var_name;
public const double PI=3.1415926;

类型和字量

字量是类型的字面值,与常量在本质上相同,更加简单,不用声明,直接写出即可。

type var_name;
type var_name=initial_value;

通常type有:

类型 含义
bool 布尔值,true/false
byte/sbyte/short/ushort/int/uint/long/ulong 整型,位数不同,加u表示无符号,表达范围不同
float/double/medical 单/双/银行精度浮点型,medical定义的字变量之后需要加后缀M
char 字符变量,可以是普通字符、转义字符、十六进制转义字符、Unicode字符
string 字符串变量,正则字符串字量可含转义字符;逐字字符串字量双引号内均视为字符串,之前用@开头引导
null 引用类型的空字量,可赋值给引用类型;赋值给非引用类型,可用int? i=null的可空类型语法

类型

类型有多种分类方法,主要以值类型和引用类型进行区分。

值类型 引用类型
简单类型、枚举类型、结构类型 类类型、接口类型、委托类型、数组类型、字符串类型

值类型是栈中直接存储值;引用类型是栈中存放堆中的地址。引用类型在发生改变时,可能使得其他任何从该地址引用的引用类型发生变化

值类型

类型 描述
有符号/无符号整形 sbyte/short/int/long(8,16,32,64);byte/ushort/uint/ulong(8,16,32,64)
Unicode字符型 char
IEEE浮点型 float/double(32,64)
高精度小数型 demical(128)
布尔型 bool
枚举类型 enum E{···}
结构类型 struct S{···}

引用类型

类型 描述
类类型:object 其他所有类型的基类
类类型:string Unicode字符串
类类型:class 用户自定义
接口类型 用户自定义,interface I{···}
数组类型 单维/多维,int[]与int[,]
委托类型 用户自定义 delegate T D(···)

枚举和结构

枚举类型:相同数据类型的集合,不能定义在函数中。是一组数字的映射
结构类型:不同数据类型的集合,不能定义在函数中。与类类型相似,但它的实例化依然是值类型,而不是类类型的引用类型

using System;
class Program
{
	struct Point  // define a struct
	{
		public int x,y;
		public Point(int x0,int y0)
		{	x=x0;	y=y0;
		}
	}
	static void Main()
	{
		Point p1=new Point(10,10);
		Point p2=p1;
		p1.x=100;
		Console.WriteLine("p2.x={0},p2.y={1}",p2.x,p2.y);
	}
}

上述例子后,p2.x仍为10,不会变;而当point是一个类时,p2.x会变成100

数组

int[] a=new int[2]{6,4};
int[] a=new int[]{6,4};
int[] a={6,4}
// original express
int[] a;
a=new int[2];
a[0]=6;	a[1]=4;
// more dimension
int[,] b=new int[3,2] {{1,2},{3,4},{5,6}}
b[0,1]=25
// jagged array
int[][] c=new int[3][];
c[0]=new int[2]{1,2};
c[1]=new int[3]{2,3,4};
c[2]=new int[2]{6,7};

变量转换

  1. 隐式转换
    范围小–>范围大转换
  2. 强制类型转换
    在类型前加需要转换的类型
  3. Tostring()函数
    把各类变量转化为string变量
  4. Convert类
    使用Convert.To转化为各种类型
// casts
double d=2.2;
int i=(int)d;
// ToString()
int i=250;
string s=i.ToString();
// Convert
double r=Convert.ToDouble("3.14");

运算符

运算符 含义 示例
+/- 加/减 int a=3+2 (5)
++/– 自增/自减 i++
*// 乘/除 float c=4/3*6 (6)
% 取余 int b=7%3 (1)
~ 按位非 a=~00101010 (11010101)
& 按位与 int a=42&15 (10)(00001010)
[] 数组/索引器/特性 array[i]/h[“a”]
new 创建对象 object obj=new object()
sizeof 字节数 sizeof(double)
typeof 类型 System.Type dt=tpyeof(double) (dt=System.Double)
checked 判断是否溢出 int a=int.MinValue; int c=checked(a–) (抛出异常)
unchecked 取消检查 int a=int.MinValue; int c=unchecked(a–) (不抛出异常但无效)

参考:《面向对象和组件的C#编程》 李军

发布了7 篇原创文章 · 获赞 2 · 访问量 646

猜你喜欢

转载自blog.csdn.net/qq_41450779/article/details/89791070
今日推荐