您的位置:首页 > 编程语言 > C#

C#自学笔记

2015-08-30 19:15 441 查看

C#自学笔记

/**

基本格式

*/

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

namespace name {

class program {

static void Main(String[] args) {

}
}


}

c#类型

值类型:

简单类型:

符号整型 :sbyte short int long

无符号类型 :byte ushort uint ulong

unicode字符: char

浮点型 : float double

精度小数 :decimal

布尔型 :bool

枚举类型:

枚举定义 :enum name {}

结构类型:

结构定义 :struct name {}

引用类型:

类类型:

最终基类 :object

字符串 : string

定义类型 :class name

接口类型:

接口定义 :interface

数组类型:

数组定义 :int[]

委托类型:

委托定义 :delegate name

各种类型的取值范围:

sbyte : -128 ~ 127 整数

byte : 0 ~ 255 整数

short :-32768 ~ 32767 整数

ushort :0 ~ 65535 整数

int : -2147483648 ~ 2147483647 整数

uint :0 ~ 4294967295 整数

long : 很大

ulong :很大

float : 32位浮点数,精度是7位

double : 64位浮点数,精度是15~16位

bool :布尔型有两个取值范围,分别是 true 和 false

string :可以取unicode中所有字符 而不是 ascll

decimal : 一种高精度的、128位的数据类型,常用于金融和货币计算项目,28~29位有效数字,取值范围 10 ~ 70 或 -10 ~ -70

string : 用来表示字符串,常用于文本字符的代替,是字符char 的集合 例如 string name = “张瑀楠”;string 变量可以使用 + 连接

例如 string mm = “hello “; string nn = “world”; mm = mm + nn; 则 mm 的值为 hello world

各种类型的声明和赋值(这个应该都会吧)

int age = 100;

string name = “张瑀楠“;

char ch = ‘a’;

在输出变量时 变量必须已经被赋值

常量

通常将只固定不变的变量成为常量

常量的类型 sbyte byte ushort short int uint long char double float decimal bool string or enum

常量在定义的时候 使用 const 并且常量在定义的时候必须初始化

正确用法:

const int a = 78;

const string nn = “value”;

错误写法:

const int a ;

a = 78;

/*

这是我学习 c# 2天时做的总结昨天刚看了一本书的前100页 我打算现在开始学

time 2014/12/6

*/

进制的转换

Convert.ToInt32(“转换的数”,基数);

demo:

二进制转为十进制

Convert.ToInt32(“110011”,2);

八进制转为十进制

Convert.ToInt32(“567”,8);

Convert.ToString(数字,基数);

demo:

十进制转为二进制

Convert.ToString(89,2);

类型转换:

隐式转换:

在c#中bool和string是没有隐式转换的

其他隐式转换遵循取值范围的从小到大

显示转换:
一种强制的转换方式
例子:
double var1 = 45.45;
int var2 = (int)var1;
对显示转换进行检查
int n = 8226589;
short s = checked(short(n));
当出现溢出时,会报出异常

字符串和数字之间的转换
demo
string str = "3.14";
double pi = Convert.ToDouble(str);


基本的.NET框架

Console类

Console类能够为控制台应用程序提供字符的读写支持,其常用方法有:

WriteLine(); //the mathons same as printf(“…….\n”,….);

具体用法:

Console.WriteLine(“adcd”); //这个等同于 printf(“abcd\n”);

int a = 16;

Console.WriteLine(“a = {0}”,a); //这个相当于 printf(“a = %d\n”,a);

//在c#中输出时不需要去为定义的变量加输入格式 当然 为了特殊需要 我们也可以加上格式输出

Write(); //the mathons same as printf(“….”,…..);

//也就是这里输出时没有换行,其他和WriteLine相同

Read();      从输入的时候读入一个字符
用法:
char Key = Console.Read();
即使 我要输入 ab 结果key只是a

ReadLine();  从输入的时候读入一整行数据
用法:
string str = Console.ReadLine();
如果输入ab 此时 str就是ab
现在只是说了字符的输入 等下再写 关于数值的输入方法

Convert类
能够将一种基本类型转换成另一种基本类型
ToByte()  转换为byte型
ToInt16() ...short
ToInt32() ...int
ToInt64() ...long
ToSByte() ...sbyte
ToUInt16()...ushort
ToUint32()...uint
ToUInt64()...ulong
ToSingle()...float
ToDouble()...double
ToDecimal()...decimal
ToChar()  ...char
ToString()...string
ToBoolean()...bool
这些转换自动进行溢出检查,不需要使用checked

例子:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
Console.Write("请输入一个数字字符串");
string mm = Console.ReadLine();
decimal nn = Convert.ToDecimal(mm);
double zz = Convert.ToDouble(nn);
int i = Convert.ToInt32(zz);
char ch = Convert.ToChar(97);
Console.WriteLine("输入的是{0}", mm);
Console.WriteLine("decimal形式是{0}", nn);
Console.Write("double 形式是{0}",zz);
Console.Write("int 形式是{0}",i);
Console.Write("ch 形式为{0}" ch);
Console.ReadKey();
}
}
}

result:

请输入一个数字字符串1234
输入的是1234
decimal形式是1234
double 形式是1234int 形式是1234
ch 形式为 a

通过例子可以看出Console and Convert 的 用法 通时也提供了一种 数值输入的方法
关于数值的输入,可以使用上面中的类型转换的方法
int a = Convert.ToInt32(Console.Read());

demo:
static void Main(String[] args)
{
double r , s;
Console.Write("r = ");
r = Convert.ToInt32(Console.ReadLine());
s = 3.14 * 3.14 * r;
Console.WriteLine("s = " + s);
}

Math类
一些简单的表达式
Math.Sqrt(value); 求平方根
Math.Pow(a,b);    求 a 的 b 次幂

变量的格式化输出
控制宽度{,宽度:c小数位数}  //c为货币符号
{,#.00} 显示两位小数

基姆拉尔森公式:
根据日期求这天是周几
int y = 2008;
int m = 8;
int d = 8;
int week = (d + 2 * m + 3 * (m + 1 )/5 + y + y / 4 - y / 100 + y / 400 + 1) % 7;


表达式和运算符

表达式学过编程语言的应该都明白,现在开始说说运算符

. 运算符
通过 . 运算符可以对项目内不同的成员进行访问,包括命名空间的访问类、类访问方法和数值

() 运算符
定义方法和委托

[] 运算符
能够存储项目预防问的元素 例如数组的读取

++  --  运算符

new 运算符
可以创建项目中引用类型的实例,即创建类、数组和委托的实例

sizeof 运算符
返回指定类型的所占的字节数

typeof 运算符

数学运算符
运算符     类别      处理表达式           result
+           二元      mm = nn + zz;       plus
-           二元      mm = nn - zz;       sub
*           二元      mm = nn * zz;       积
/           二元      mm = nn / zz;       商
%           二元      mm = nn % zz;       模
+           一元      mm = +nn;           乘以 +1
-           一元      mm = -nn;           乘以 -1
+=          二元      mm += nn;           mm = mm + nn;
-=          二元      mm -= nn;           mm = mm - nn;
*=          二元      mm 8= nn;           mm = mm * nn;
/=          二元      mm /= nn;           mm = mm / nn;
%=          二元      mm %= nn;           mm = mm % nn;

比较运算符(与其他语言一样)
==
<
>
<=
>=
!=

逻辑运算符
!
&
|
~      mm = nn ~ zz;   if nn and zz only is true ,mm = true。
||
&&

移位运算符
<<
>>

运算符的优先级


流程控制语句

if…else…

switch //需要理解和其他语言中的switch的不同

while() {...} and  do {...} while()

for( ; ; )

break

continue

goto

return


复杂的数据类型

枚举

枚举类型用关键字enum定义,中间用逗号隔开(默认从零开始计数,即Sunday 为0,Monday为 10):

enum WeekDays{Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday}

demo:

namespace Demo

{

enum WeekDays{Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday}

class Program

{

static void Main(String[] args)

{

WeekDays today = Wednesday.Sunday;

if(today == Wednesday.Saturday || today == Wednesday.Sunday)

{

Console.WriteLine(“I love the weekends”);

}

else

{

Console.WriteLine(“Back to work”);

}

WeekDays temp;
temp = (WeekDays) 3;
Console.WriteLine(temp);

temp = WeekDays.Friday;
Console.WriteLine((int)temp);

//枚举型进行计算
temp = temp + 1;
Console.WriteLine(temp);
}
}
}

enum WeekDays
{
Sunday = -5,
Monday,   //-4
Tuesday,  //-3
Wednesday = 100,
Thursday, //101
Friday,   //102
Saturday  //103
}

结构
结构体有struct定义
struct Student
{
public int number;
public string name;
public string sex;
public string birthday;
}

demo
static void Main(String[] args)
{
Student zyn;
zyn.number = 2013040510;
zyn.name = "zyn";
zyn.sex = "man";
zyn.birthday = "1994.01.09";
Console.Write("学号:" + zyn.number);
Console.Write("姓名: " + zyn.name);
Console.Write("性别: " + zyn.sex);
Console.Write("生日: " + zyn.birthday);
}

数组
这里的数组的定义方法异于c和c++
数组在定义的时候
int[] aa = {...};
rather than
int a[];
demo
static void Main(String[] args)
{
int[] scores = { 120 ,149 ,112 ,133 ,127};
for(int i = 0 ; i < scores.Length ; ++i)
{
Console.Write(scores[i]);
}

string[] friendNames = new string[3];
friendNames[0] = "hl";
friendNames[1] = "hh";
friendNames[2] = "hs";

foreach(string name in friendNames)
{
Console.WriteLine(name);
}
}

多维数组的使用
static void Main(string[] args)
{
//定长数组
int[,] Matrix = { {1 , 2 , 3} ,{4 , 5 , 6} , { 7 , 8 , 9}};
int sum = 0;
for(int i = 0 ; i < 3 ; ++i)
{
for(int j = 0 ; j < 3 ; ++j)
{
sum += Matrix[i][j];
}
}

Console.WriteLine("the sum of Matrix is " + sum);

//不定长数组
int[][] ja = new int[2][];
ja[0] = new int[3];
ja[1] = new int[4];
ja[2] = new int[5];
}


函数

function

参数传递

值传递

地址传递

复杂类型的参数传递

引用型参数传递(ref)

demo(swap value a and b)

void Swap(ref int x,ref int y)

{

int temp = x;

x = y;

y = temp;

}

输出型参数传递(out)

out型参数传入函数前不需赋值,即使赋值也会被忽略

demo(已知半径就面积)

double CalculateCircle(double r , out double c)

{

c = 2 * Math.PI * r ;

double s = Math.PI * r * r;

return s;

}

递归函数
斐波那契
demo
static int Fibonacci(int n)
{
if( n == 1 || n == 2)
{
return 1;
}
else
{
return Fibonacci(n - 1) + Fibonacci(n - 2);
}
}


面向对象编程技术



class Person

{

public string name;

public int age;

public string sex;

private int miceCount = 0;

private void Hello()
{
Console.Write("haha zyn");
}

public void Neow()
{
Hello();
Console.WriteLine("miaomiao");
}
}
构造函数
析构函数

非托管程序(不是在.NET程序下运行的程序)
System.Gc.Collect() 强制调用垃圾回收机制

readonly 常量

方法的重载

运算符的重载
重载运算符由关键字 operator 声明,必须定义为静态
demo
class Complex
{
public double a;
public double b;

public static Complex operator + (Complex p1 , Complex p2)
{
return new Complex(p1.a + p2.a , p1.b + p2.b);
}

public Complex(double real , double imagi)
{
a = real;
b = imagi;
}

}


核心技术篇

方法
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: