OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3967|回复: 2

c#学习记录

[复制链接]

25

主题

135

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
404
金钱
404
注册时间
2016-8-23
在线时间
50 小时
发表于 2017-5-31 16:49:27 | 显示全部楼层 |阅读模式
DAY1:
1)解决方案包含项目,项目包含类(.cs结尾),properties是属性。
2)在视图里面找解决方案资源管理器。
3Program中的各个组成部分。
引用命名空间:引用哪个资源下面的类必须包含资源,用using
namespace 项目名命名。
Class 一个类。
4)方法或者函数
main函数是程序的主入口,写的代码被执行必须写在main函数中。
5)代码中出现所有的标点,均用英文半角,shift切换,每行代码结束用分号。
6)Console.Writeline(“要打印的内容”);
   Console.ReadKey();  暂停当前程序,等待用户按下任意键继续,按下的任意键将显示在控制台中。
7)在代码运行前,点击“生成解决方案”,可以排查语法错误。
8)选着启动项目在解决方案右键--属性设置
DAY2
1)关键 代码需要写注释
2)常用快捷键:
Ctrl+k+d:快速对齐代码
Ctrl+j:快速弹出智能提示
Ctrl+k+c:注释所选代码
Ctrl+k+u:取消注释
3)代码中出现红色波浪线,语法错误;绿色波浪线,警告线,可能出现错误
4)Camel 骆驼变量名命名规范,要求变量名首单词首字母小写,其余大写,highSchool,多用于给变量、字段命名
Pascal命名规范,每个单词首字母大写,其余小写,多用于给类或者方法命名
5)+可以连接字符串
6)占位符 console.writeline(“{0}{1}”,ab);占坑再填坑,多填坑没效果,少填坑会出现异常。
7)转义符,指一个\+一个特殊字符,组成具有特殊意义的字符
\n 换行符,只能在控制台起作用
\r\n windows换行
\”表示英文半角符号
\t制表符,相当于空一些位置,多用于字符串排版,相当于tab
\b用于删除前面一个字符,不能放在字符串两端,表示一个退格键。
\\表示一个\
@可以取消\在字符串中的转义作用
@加在字符串前让字符串原格式输出
string str = "hfsehrjx";
System.IO.File.WriteAllText(@"C:\Users\Administrator.WIN7U-20120726M\Desktop\111.txt",str);
Console.WriteLine("写入成功");
Console.ReadKey();//写一个文件
8)=两边的数据类型必须相同,但是,满足下列条件会发生隐类型转换
Intdouble兼容,目标类型大于源类型。
9)convert类型转换
int s;
double t  =  Convert.ToDouble(s);
如果想在double输出类型保留两位,则在占位符{0:0.00}即可
10)++--不管在前还是后,都是给这个变量+1或者-1,若在后,先原值计算,再+1,和c语法一样
闰年能被400整除,能被4整除但是不能被100整除
11)在程序中会出现各种各样的异常,在代码中应该经常使用try-catch来进行异常捕获、哪行代码可能有异常就try一下,语法如下:
try
{
可能会出现异常的代码
}
Catch
{
出现异常后执行的代码
}
变量的使用区域:大括号开始,大括号结束
12)break,跳出循环,不再继续
Continue,不再继续本次循环,若满足条件继续循环,不满足跳出循环
13)random r=new random();生成随机数
Int rNumber=r.next1,7);
14)常量 const 不可以被重新赋值
15)枚举
[public] enum 名称
{
1
2
3
。。。
}
Public:访问修饰符,公开的,哪儿都可以被访问到
写在类的上面,命名空间下面
16)数组申明 数组类型[] 数组名=new 数组类型[数组长度];
17)方法:函数就是将一堆代码进行重用的一种机制(类似于封装)
[public] static 返回值类型 方法名([参数列表
{
方法体;
}
方法名要用pascal命名,单词首字母大写。
传递参数
用静态字段模拟全局变量所有函数都可以访问
如果方法中需要返回多个值,可以考虑返回数组,用一个类型,若是不同类型的值,可以使用OUT
18)在函数调用中,ref参数能够将一个变量带入方法中进行改变,完成后将改变后的值带出方法,就不用申明返回值了。
19)params可变参数:将实参列表中跟可变参数数组类型一致的元素都当作数组的元素去处理
20)方法的重载:方法的名称相同但是参数不同
参数的个数相同,那么参数的类型不能相同
参数的类型相同,那么参数的个数不能相同
21)改输出字颜色的语句:console.foregroundcolor=console.gray
DAY3:
1)类的基本语法:
   [public]class 类名
{
字段;
属性;
方法;
}
写好一个类之后需要创建类的对象,这个过程叫类的实例化,使用关键字new
this 表示当前这个类的对象
类是不占内存的,而对象占内存
属性的作用是保护字段,对字段的赋值和取值进行限定
属性的本质是两个方法,一个是get 一个是set
Field 字段
Method 方法
Property 属性 (和外界打交道)
访问修饰符:
Public :公共的,在哪里都可以访问
Private:私有的,只有在当前的类的内部访问
Public string Name //属性  ctrl+r+e快速
{
Get { return _name;} //取值执行get
Set{ _name =value;} //赋值执行set
}
2)静态方法和非静态方法区别:
在非静态类中,既可以有实例成员,也可以有静态成员
在调用实例成员的时候,需要对象名.实例成员
总结:静态成员必须使用类名调用,而实例成员通过对象名调用
      静态函数中,只能访问静态成员,不允许访问实例成员
      实例函数中,都可以访问
  静态函数中只允许有静态成员,不允许有实例成员
使用:如果想把类当作工具类使用(比如console),这个时候可以考虑将类写成静态类
      静态类在整个项目中共享,占内存的(内存分:堆,栈,静态存储区)
      只有程序结束,静态区才会释放


5.31.zip

1.55 MB, 下载次数: 409

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

25

主题

135

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
404
金钱
404
注册时间
2016-8-23
在线时间
50 小时
 楼主| 发表于 2017-5-31 16:49:44 | 显示全部楼层
构造函数:
作用:帮助我们初始化对象(给对象的每个属性依次赋值)
构造函数是一个特殊的方法
构造函数没有返回值,连void也不能写
构造函数的名必须和类一样
创建对象的时候会执行构造函数
3)new关键字
Person zsperson = new person()
在内存中开辟一块空间
在开辟的空间里创建对象
调用对象的构造函数进行初始化对象
4)this关键字
代表当前类的对象
在类当中显示的调用本类的构造函数     语法:    :this
5)析构函数:帮助释放资源
~类名()
{
   //程序结束才会执行
}
6)命名空间  namespace  用于解决类重名问题,可以看作“类”的文件夹
如果当前项目没有这个类的命名空间,需要手动导入
用鼠标点
Alt+shift+f10
7)在一个项目中引用另一个项目的类
第一步:添加引用 (在资源管理器中添加)
第二步:引用命名空间  using+namespace
8)值类型和引用类型
区别:
值类型和引用类型在内存上存储的地方不一样
在传递值类型和引用类型的时候传递方式不一样
值类型我们称之为值传递,引用类型我们称为引用传递
值类型:int double bool char decimal struct enum
引用类型:string 自定义类
值类型的值是存储在内存的栈中
引用类型的值是存储在内存的堆中

9)字符串
字符串的不可变性
当你给一个字符串重新赋值后,旧的值没有销毁,而是开辟一个新空间
当程序结束后,GC扫描整个内存,如果发现有的空间没有被指向,则立即销毁。
我们可以把字符串看成char类型的一个只读数组 ToCharArray将字符串转换为char数组
10)继承
我们在一些类中,会写一些重复的成员,可以把类中重复定义的成员写到一个类中,作为这些类的父亲
Student Teacher Driver 子类  派生类
Person 父类 基类
子类继承了父类的属性和方法,没有继承父类的私有字段
子类并没有继承父类的构造函数,子类会默认调用的父类无参数的构造函数,创建父类对象,让子类可以使用父类中的成员,
继承具有单根性:一个子类只能有一个爹
传递性:可以传递继承
:base可以调用父类有参函数

11)object是所有类的基类  new可以隐藏从父类那里继承的成员;创建对象
12)里氏转换:
子类可以复制给父类
如果父类中装的是子类对象,那么可以将这个父类强转为子类对象
子类对象可以调用父类中的成员,但是父类对象只能调用自己的成员
若父类中装的是子类对象,则可以将这个父类强转成子类对象

is:表示类型转换,如果能够转换成功,则返回一个true,否则返回一个false
as:表示类型转换,如果能够转换,则返回对应的对象,否则返回一个null
语法 if(xxx is  xxx)
Protected 受保护的,可以在当前类的内部以及该类的子类中访问
13)list.Add添加元素,但是添加集合用list.AddRange
list.Remove(xx)xx写谁删除谁
list.Remove(x)删除下标为x的元素
list.Sort()升序排列
list.Reverse()降序排列
list.Insert(num,value)在num前面插入一个value
list.InsertRange(num,new string[]{“wef”,“fewf”})在指定位置插入数组

AarryList集合长度问题:
每次集合中实际包含的元素个数(count)超过了可以包含的元素个数(capcity)的时候,集合就会向内存中申请多开辟一倍的空间,来保证集合的长度一直够用

14)Hastable集合: 键值对集合

Path:
path.GetFileName(xxx)获得文件名


GB2312  简体字  Big5 繁体字   unicode 解析起来慢   UTF-8
乱码:保存这个文件所采用的编码和你打开这个文件所采用的格式不一样

DAY4:
1)文件的读取
File.ReadAllText   .writeAllBytes     .ReadAllLines
绝对路径:通过给定的路径直接能在我的电脑中找到这个文件
相对路径:文件相对于应用程序的路径

2)装箱:将值类型转换为引用类型
拆箱:将应用类型转换为值类型
看两种类型是否发生了装箱和拆箱,要看这两种类型是否有继承关系,如果有,则发生了装箱和拆箱

3)字典
Dictionary<int,string> dit = new Dictionary<int,string>();
类似键值对集合
统计字符出现次数,用字典做
4)File文件流
Filestream操作字节  所有文件均可操作
5)将创建文件流对象的过程写在using当中,会自动帮助我们释放流所占用的资源
6)多态:让一个对象表现出多种类型
虚方法:
将父类的方法标记为虚方法,使用关键字virtual,这个函数可以被子类重新写一遍
抽象类成员必须被标记为abstract,且不能有任何的实现
抽象成员必须在抽象类中
抽象类不能被实例化
子类继承抽象类后,必须把父类的所有抽象成员都重写
(除非子类是一个抽象类--可以不重写)
抽象成员的修饰符不能是private
在抽象类中可以包含实例成员,并且抽象类的实例成员可以不被子类实现
抽象类是有构造函数的,虽然不能被实例化
7)简单工厂的核心,根据用户的输入创建对象赋值给父类
8)值类型:int double char decimal bool enum struct
   引用类型:string 数组  自定义类 集合  object 接口
值类型在赋值时候,传递的是这个值的本身
引用类型在赋值的时候,传递的是这个值得引用
9)序列化:将对象转换为二进制
反序列化:将二进制转换为对象
目的:传输数据
序列化步骤:将类序列化 [Serializable]
Sealed密封类
不能够被其他类继承,但是可以继承其他类

10)重点接口:接口就是一个规范、能力
[public]   interface  I...able
{  成员;
}
只要一个类继承了一个借口,这个类就必须实现这个接口中的所有成员,接口不能被new,接口中的成员不能加访问修饰符,接口中的成员访问修饰符为public 不能被修改,且接口中的成员不能有任何实现。
接口中只能有方法、属性、索引器、事件,不能有“字段”和构造函数
接口与接口之间可以继承,并且可以多继承
接口并不能去继承一个类,而类可以继承接口
一个类可以同时继承一个类并实现多个接口,如果一个子类同时继承了父类A,那么语法上A必须写在IA的前面
Class Myclass:A,IA{},因为类是单继承的
当一个抽象类实现接口的时候,需要子类去实现接口
DAY5:
一、winform基础:(CS模式)
Winform应用程序        是一种智能客户端技术,可以帮助我们获取信息或者传输信息。

Name:在后台要获得前台的控件对象,需要使用name属性
1、Button属性:(button按钮在公共控件中)
Anchor:设置拖动窗口的时候按钮的变化形式
BackColor:设置背景颜色
BackgroundImage:设置按钮图片
BackgroundImageLayout:一般选择Stretch
右键下拉框设置:菜单和工具栏->ContextMenuStrip设置好要显示的内容后,在按钮属性的ContextMeunStrip里选中
Cursor 选择光标样式
Visible 值为ture时显示按钮
Enable 指示一个控件是否可用
2、事件:发生一件事情
注册事件:按钮注册事件一般是点击,MessageBox.Show(“wf”);点击按钮弹出消息显示
双击控件注册的都是控件默认被选中的那个事件

触发事件

3、在mian函数中创建的窗体对象,我们称之为这个窗体应用程序的主窗体,也就意味着,当你将主窗体关闭后,整个应用程序就关闭了
4、TextBox控件:
   滚动条:ScrollBars
   密码框输入变字符为“*”---->  PasswordChar
   文本框文本发生改变时,赋值给label      label1.Text=textBox1.Text;
WordWrap:指示文本框是否换行
5、跑马灯
String str = “abcde”;
Str=Str.substring(1)+Str.substring(0,1)
Timer:在指定的时间间隔内执行一件事   用之前记得把timer标签设置为true
6、保存文件:
    using(FileStream fsWrite = new FileStream(@"C:\Users\Administrator.WIN7U-20120726M\Desktop\newnew.txt", FileMode.OpenOrCreate, FileAccess.Write))
            {
                string str = textBox3.Text.Trim();
                byte[] buffer = System.Text.Encoding.Default.GetBytes(str);
                fsWrite.Write(buffer, 0, buffer.Length);
            }
            MessageBox.Show("保存成功!");
7、checkBox:多选框   
   radioButton:单选框
   可以把同一类的按钮放在  容器--groupBox下面,在一个窗体中,单选按钮只允许选中一个,判断是否被选中在属性checked
8、MDI窗体设计
在窗体属性中找到IsMdiContainer确定父窗体
菜单栏是  menustrip
9、directory:操作文件夹
  Move 剪切  exists:判断是否存在   getdirectories:获得文件夹下所有路劲
Delete:删除    createDirectory:创建
回复 支持 1 反对 0

使用道具 举报

6

主题

54

帖子

0

精华

初级会员

Rank: 2

积分
136
金钱
136
注册时间
2017-4-10
在线时间
42 小时
发表于 2017-6-23 08:02:00 | 显示全部楼层
感谢分享
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-23 04:31

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表