根据刘铁猛老师学习做的笔记
老师邮箱:Mr.Okay@outlook.com
类的概念
类class是对现实世界事物进行抽象所得到的结果
建模是一个去伪存真、由表及里的过程
对象也叫实例,是经过“实例化”后得到的内存中的实体
使用new操作符创建类的实例
类的三大成员
属性 方法 事件
某些特殊类或者对象在成员方面侧重点不同
模型类或对象重在属性,如Entity Framework
工具类或对象重在方法,如Math,Console
通知类或对象重在事件,如各种Timer
静态成员与实例成员
1.静态(static)成员在语义上表示它是“类的成员”;
2.实例(非静态)成员在语义表示它是“对象的成员”
3.绑定(Binding)指的是编译器如何把一个成员与类或对象关联起来
不可小觑的“.”操作符——成员访问
C#语言基本元素
构成c#语言的基本元素:
关键字(keyword)
操作符(Operator):加减乘除以及逻辑运算
标识符(ldentifier):
什么是合法的标识符?不能和关键字冲突,可以用字母、数字、下划线、不能拿数字开头,至少覆盖90%
查MSDA文档
标点符号
文本(字面值) 前五项统称为标记(Token)
布尔值(逻辑运算)
bool b =true;
bool b2=false;
实数
long a=3L;
float x=3.0;float是单精度浮点类型
double y=4.0D;double是双精度浮点类型
D表示双精度浮点类型
字符: char c=‘a’
单引号只能引一个字符
字符串:string str=“ABCDE”;也可以是一个字符
空值:string str =null
注释与空白:单行注释//;块注释 /开头 结尾/
空格 ,有时候必须加,c#语言,多个空格与一个空格一样;edit->advanced->format document可以自动把空格格式调整;快捷键:ctrl+连续D+E;
简要介绍类型、变量与方法
算法简介
类型、变量和方法
类型(Type)
var x = 3L;
Console.WriteLine(x.GetType().Name);
变量是存放数据的地方,简称数据
int x;
x=100;
方法(旧称函数)是处理数据的逻辑,又称“算法”
方法的声明
方法的调用
class Program
{
static void Main(string[] args)
{
Calculator c = new Calculator();
int x = c.Add(2, 3);
Console.WriteLine(x);
}
}
class Calculator
{
public int Add(int a,int b)
{
int result = a + b;
return result;
}
}
class Program
{
static vo Main(string[] args)
{
Calculator c = new Calculator();
string str = c.Today();
Console.WriteLine(str);
}
}
class Calculator
{
public int Add(int a,int b)
{
int result = a + b;
return result;
}
public string Today()
{
int day = DateTime.Now.Day;
return day.ToString();
}
}
不用数据变量,直接返回结果
有些没有数据返回,用void(有输入没有输出,直接写出来)
class Program
{
static void Main(string[] args)
{
Calculator c = new Calculator();
c.PrintSum(4, 6);
}
}
class Calculator
{
public int Add(int a,int b)
{
int result = a + b;
return result;
}
public string Today()
{
int day = DateTime.Now.Day;
return day.ToString();
}
public void PrintSum(int a,int b)
{
int result = a + b;
Console.WriteLine(result);
}
}
程序=数据+算法
算法简介
循环
class Program
{
static void Main(string[] args)
{
Calculator c = new Calculator();
c.PrintXTo1(10);
}
}
class Calculator
{
public void PrintXTo1(int x)
{
for (int i = x; i >0; i--)
{
Console.WriteLine(i);
}
}
}
递归
class Program
{
static void Main(string[] args)
{
Calculator c = new Calculator();
c.PrintXTo1(10);
}
}
class Calculator
{
public void PrintXTo1(int x)
{
if (x==1)
{
Console.WriteLine(x);
}
else
{
Console.WriteLine(x);
PrintXTo1(x - 1);
}
}
}
计算1到100的和
class Program
{
static void Main(string[] args)
{
Calculator c = new Calculator();
int result=c.SumForm1ToX(100);
Console.WriteLine(result);
}
}
class Calculator
{
public int SumForm1ToX(int x)
{
int result = 0;
for (int i = 1; i < x+1; i++)
{
result = result + i;
}
return result;
}
}
用递归方法:
class Program
{
static void Main(string[] args)
{
Calculator c = new Calculator();
int result=c.SumForm1ToX(100);
Console.WriteLine(result);
}
}
class Calculator
{
public int SumForm1ToX(int x)
{
int result = 0;
if (x==1)
{
return 1;
}
else
{
result = x + SumForm1ToX(x - 1);
return result;
}
}
}
详解类型、变量与对象
什么是类型?(Type)
又名数据类型
是数据在内存中存储时的“型号”
小内存容纳大尺寸数据会丢失精确度、发生错误
大内存容纳小尺寸数据会导致浪费
编程语言的数据类型与数据的数据类型不完全相同
强类型语言与弱类型语言的比较
C语言示例:if条件
JavaScript示例:动态类型
c#语言对弱类型/动态类型的模仿
类型在c#语言中的作用
一个c#类型中所包含的信息有:
存储此类型变 量所需的内存空间大小
此类型的值可表示的最大、最小值范围
此类型所包含的成员(如方法、属性、事件等)
此类型由何基类派生而来
程序运行的时候,此类型的变量在分配在内存的什么位置
Stack简介(栈)方法调用,小,快
Stack overflow栈溢出
Heap简介,存贮对象,大 ,几个G,要回收,内存泄露
使用Performance Monitor查看进程的堆内存使用量
关于内存泄漏
此类型所允许的操作(运算)
Type myType = typeof(Form);
Console.WriteLine(myType.FullName);
C#语言的类型系统
变量、对象与内存
自己遇到的问题汇总:
1.C#运行结果一闪而过,没有停留,等待用户按任意键关闭
解决办法:1.运行程序的时不用F5键执行,用Ctrl+F5执行,它的意思是“启动执行(不调试)”。
2.在代码的最后加上这句 Console.ReadLine(); 也就是“等待用户输入”,这样DOS窗口直到你敲击回车键才会关闭或者在程序最后加上一句Console.ReadKey();这样DOS窗口接收一个字符才会退出。
2.使用using时缺少,程序集引用,报错,
解决方法:如果是未找到类型,检查是否引用了类型所在的命名空间,使用using指令。
选择 -> “项目” -> “添加引用” ->搜索需要的引用
c#语言的五大类型系统
类(class):如Windows,Forms,Console,String
结构体(Structures):如Int32,Int64,Single,Double
枚举(Enumerations):enum
HorizontalAlignment,Visibility
接口(Interfaces)
委托(Delegates)
c#类型的派生派系
变量、对象与内存
变量的用途是存储数据
变量表示了存储位置
变量表示了存储位置,并且每个变量都有一个类型,以决定什么样的值能够存入变量
也就是变量名称(对应着)变量的值在内存中的存储位置;
变量一共有7种
静态变量,实例变量(成员变量,字段),数组元素,值参数,引用参数,输出形参,局部变量
静态成员属于这个类,而不是这个类的实例
狭义的变量指局部变量,因为其他种类的变量都有自己的约定名称
简单地讲,局部变量就是方法体(函数体)里声明的变量
变量的声明 int a;
有效的修饰符组合opt 类型,变量名,初始化器opt
综合:变量=以变量名所对应的内存地址为起点、以其数据类型所要求的存储空间为长度的一块内存区域
值类型的变量
以byty/sbyty/short/ushort
值类型没有实例,所谓的“实例”与变量合而为一
sbety -128~127
uint 32比特,4个字节
计算机存储负数:按位取反再加一
ushort无符号短整型,0-65535占16比特,也就是两个字节
short-32768~32767
引用类型的变量与实例
“小朋友牵着气球”
引用类型变量与实例的关系:引用类型变量里存储的数据是对象的内存地址
局部变量是在stack(栈)上分配内存
变量的默认值为0.
常量(值不可以改变的变量)
装箱与拆箱
装箱object,:把栈上值类型封装成object实例放在堆上
拆箱:从堆里object实例拆成目标数据类型往栈里搬东西
装箱和拆箱会损失程序的性能