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

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修饰的全局变量声明与定义同时进行;
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

你可能感兴趣的:(C#)