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

C#程序设计(第二版)-王贤明-清华大学出版社-笔记

2017-10-30 22:01 381 查看
http://product.dangdang.com/24178813.html

概述及编辑器技巧:

控制台程序;Console.WriteLine Console.ReadLine

Winform程序:MessageBox.Show(“哈哈!”);

注释:单行;多行;XML注释///

使用VS.NET的技巧:

预制代码段:

右键插入代码段: for ,两次TAB键,

for (int i = 0; i < length; i++)

{

}


region,两次TAB 键

#region MyRegion

#endregion

变量重命名:右键定位到变量上面,选择Rename:修改完,应用;

6:快速搜索:

(1)根据类名:点击小灯泡;

(2)右键类名,选择Quick Actions,

方法生成:根据方法名及参数生成完整的方法定义;

方法提取:将已有的代码段部分提取出一个新方法;

选择代码, ExtractMethod

2017/10/22 18:09

7:任务备忘录:笔记记录工程记录;

//TODO

8:代码折叠:

#region 方法描述

# endregion

http://www.mingrisoft.com/video/126.html

2017/10/23 21:56

2017/10/24 11:27

数据类型与运算符

值类型:存放变量的真实值;

引用类型: 存放值的引用;(类、数组、字符串、接口)

常量:

通过const或者readonly关键字声明;

const double pi = 3.1416;

变量: 数字、字母、下划线;

变量的命名法:

Pascal命名法;Camel;匈牙利命名法;

简单数据类型:

bool类型:true和false

字符串向bool类型转换:Parse与TryParse的区别:

http://www.cnblogs.com/fishtreeyu/archive/2011/01/15/1936193.html

整型类型:sbyte,byte,short,ushort,int,uint,long,ulong;

char类型:

char 类型:

单个字符:char myname=’王’

字符串:string s=” China”

含有众多方法IsNumber,IsDigit等;

Console.WriteLine(char.IsDigit(‘a’));

Console.WriteLine(char.IsDigit(‘a’).ToString());

小数类型:

float f1=1.0f;

double f2=1.0d;

decimal d2=2.0m;

小数的误差累积:

double d = 0;

for (int i = 0; i < 70; i++)

{

d += 0.1;

Console.WriteLine(d + “\t”);

}
解决方法如:if d=6.2 改为 if (d-6.2)<0.001

枚举类型:

enum Season

{

Spring =0;

Summer =1;

Autum =2;

Winter =3;

}
0可以赋值给任何类型的枚举变量,枚举元素的值按定义顺序递增1;

结构类型:

Struct StuInfo

{

public string StuNo;

public int stuName;

}
隐式类型变量:

var 可以用来定义任何数据类型,但在声明的同事需要赋初始值;

能不用就不用;

运算符:

算术运算符:取模:%

Console.WriteLine(“i%j的结果:{0}”,i%j);

赋值运算符:

关系运算符与逻辑运算符:

& 与:会将运算符两端的表达式进行计算;

&& 短路与:视情况而定;

位运算符:

条件运算符:? :

右结合性;

运算符的优先级:

好难记,加括弧;

Type.Parse() 与Type.TryParse() ;

Convert类:

Console.WriteLine(Convert.ToInt32(10.4));

装箱与拆箱:

值类型与object类型(引用类型)相互转化;

查看数据类型占用字节:

Console.WtiteLine(sizeof(int))

2017/10/24 22:45

程序控制

选择语句

if 选择语句

Console.WriteLine(“时间:”+DateTime.Now.Hour);

Console.WriteLine(“时间:{0}”, DateTime.Now.Hour);

switch语句:

switch(表达式)

{

case 值1:

语句系列;

break;

case 值2:

语句;

break;

default:

语句;

break;

}
循环语句:

for

while

do …while

跳转语句:

break语句;

continue语句;

goto语句;

return语句;

throw语句;

程序执行耗时计算方法:

using System.Diagnostics;

计时开始位置输入:Stopwatch sw = new Stopwatch();

sw.Start();

执行语句;

sw.Stop();

Console.WriteLine(“执行完毕,停止计时,执行时间:{0}毫秒”,sw.ElapsedMilliseconds);

随机数:System.Random

程序集:exe文件和dll文件;

面向对象:

类和对象:

面向对象最重要的特性:封装;

继承:

类和对象的关系:

影星是类:

黄日华、翁美玲、周润发是对象;

class star

{

}
//实例化一个例:关键字:new

star huangRiHua = new star();

字段:

一般情况下,应将字段声明为private,然后通过属性、方法来访问其内容;

属性:2017/10/25 17:04

class 类名

{

//属性的一半声明方式;

private 类型 字段名;

public 类型 属性名

{

get

{

return 字段名;

}
set

{

字段名 = value;

}
}


}
自动属性:”懒人方式”

class star

{

//定义Name 属性

public string Name

{

get;

set;

}
}
就是私有域不能访问,但是通过创建了成员变量的属性,通过属性来访问私有域;

2017/10/25 23:12

方法

访问修饰符:public、 private、internal、protected;

变量的作用域:变量的生命期;

方法重载:方法名相同,除方法名外的其他签名指标不同;

方法签名:方法名,参数个数,参数类型,参数顺序相同被认为这两个方法具有相同的方法签名;

参数个数的不定问题-params

//定义一个含params参数的类;

using System;

using System.Collections.Generic;

using System.Diagnostics;

using System.Linq;

using System.Text;

namespace ConsoleApplication1

{

class mathOpr1

{

    public   int Add(params int[] nums)
{
int sum = 0;
for (int i = 0; i < nums.Length; i++)
sum = sum + nums[i];
return sum;
}public void getVolume()
{
Console.WriteLine(Add(3, 6));
}}
class mathOpr
{
static void Main(string[] args)
{
mathOpr1 test = new mathOpr1();
test.getVolume();
//Console.WriteLine(Add(3, 6));
Console.ReadLine();

}}


}
//add 方法在同一级调用不用实例化。

静态方法和实例化方法的区别

待看:http://www.cnblogs.com/chinhr/archive/2008/04/03/1135561.html

2017/10/27 13:36

ref 与out ref与out 同属按引用传递;

ref 需要在传输前赋初值;out在函数内部赋初值,以便将函数值带到外面;

再看:

http://www.cnblogs.com/yangfengwu/p/5864058.html

public(共有的) 声明的方法和属性,可以被外部调用.

private(私有的) 声明的方法和属性,只能在本类中被调用,外部看不到.

static(静态的) 声明的方法和属性,不需要实例化就能被调用,当然也有公有和私有之分.

public void AddIt(out int i)//公共方法,调用前需实例化

{

i = 100;//内部赋初值,外部赋值无效

i = i + 1;

}
private void AddIt(out int i)//私有方法,调用前需实例化,仅可在本类中调用,private 可省略

{

i = 100;//内部赋初值,外部赋值无效

i = i + 1;

}
public static void AddIt(out int i)//公共的静态方法,调用前不需实例化,类名直接访问

{

i = 100;//内部赋初值,外部赋值无效

i = i + 1;

}
private static void AddIt(out int i)//私有的静态方法,调用前不需实例化,类名直接访问,但外部类无法访问

{

i = 100;//内部赋初值,外部赋值无效

i = i + 1;

}
方法默认是私有的,所有private也可以省略,static void AddIt()和void AddIt();

C#: 静态方法,公有方法、私有方法;

<———————C语言extern与static回顾——————————

再想起了C里面的extern 修饰符,C#还没注意到;

http://www.cnblogs.com/yc_sunniwell/archive/2010/07/14/1777431.html

只在头文件中做声明,真理总是这么简单

extern 可以引用别的.C文件中的全局函数或全局变量(extern修饰符默认省略);ps:如果只是引用某.c函数中的某个全局变量或全局函数时;

如果函数的声明中带有关键字extern,仅仅是暗示这个函数可能在别的源文件里定义,此时extern 不能省略;

也可以把全局变量的定义和全局函数放在对应的.H文件中,这样调用时通过#include”xxx.h”引用;

C extern static 关键字 summary:

static修饰的全局变量声明与定义同时进行;

bd65

static修饰全局变量的作用域只能是本身的编译单元;

一般定义static全局变量时,都把它放在原文件中而不是头文件;

const单独使用时它就与static相同,而当与extern一起合作的时候,它的特性就跟extern的一样了;

const可以与extern连用来声明该常量可以作用于其他编译模块中, 如extern const char g_str[];

2017/10/28 12:48

————————————————————————————————>

2017/10/28 15:21

this 关键字:用于指示当前对象自己;

Main()函数


(1)main()函数的参数传递;

Win 7 下命令行切换目录 cd /d 其他盘符路径

(2)C# 调用C# DLL或EXE,方法和类名声明为public,

将生成的exe添加到C#引用路径,然后调用;

class Program
{
static void Main(string[] args)
{
int i = MainTest.Program.Main(new string[] { "a" });
Console.WriteLine("返回值为" + i);
i= MainTest.Program.Main(new string[] { "a" ,"b","c","d"});
Console.WriteLine("返回值为" + i);
}}


(3) 非静态main函数;

修改main方法为非static类型,然后将mainTest生成DLL;

项目–>属性–>应用程序–>输出类型;将控制台修改为类库;

新建一个工程,调用DLL输出;

class Program

{

static void Main(string[] args)

{

MainTest.Program p = new MainTest.Program();

int i = p.Main(new string[] { “a” });

Console.WriteLine(“返回值为” + i);

i = p.Main(new string[] { “a”,”b” });

Console.WriteLine(“返回值为” + i);

Console.ReadLine();

//int i = MainTest.Program.Main(new string[] { “a” });

//Console.WriteLine(“返回值为” + i);

//i= MainTest.Program.Main(new string[] { “a” ,”b”,”c”,”d”});

//Console.WriteLine(“返回值为” + i);

}
构造函数2017/10/29 16:15

(1)构造函数的名称与类名相同;

(2)构造函数不能有返回值类型,void也不行;

static

当使用static时,通过类名和 . 来访问;

当未使用static时,通过类的对象和 . 来访问;

静态成员、静态方法;实例方法(没有使用static的方法);

静态构造函数:(所有对象实例化之前执行一次) 构造函数:(每次实例化执行一次) :

析构函数


用于程序的收尾和善后处理,从内存中释放占用资源。带有~标记符;

委托


委托的作用:使用委托定义一个引用,然后用该引用指向所有与该引用具有相同方法签名的方法;并且可以通过该引用调用这些拥有相同签名的方法;http://www.runoob.com/csharp/csharp-delegate.html

2017/10/30 20:20

委托使用三步曲:

(1)声明委托 delegate

(2)实例化

(3)调用

委托类似C、C++里面的指针,C#将某个方法委托一个引用,然后用该引用调用具有相同签名的方法;

多播委托:当一个委托引用同时指向多个符合方法标示的方法时;

使用+= 来添加委托,使用-=来移除委托

http://blog.sina.com.cn/s/blog_6997f0150100u9cv.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: