一、.NET平台和C#编程的了解

一)、程序、C#语言和.NET平台

1、程序的理解

1)、 从生活的角度理解程序

  • 按照我们的需要去做一件事,并得到一个结果,从需求到结果这个过程就是程序
  • 优点:形成了步骤,人类可以按照这些特定的程序步骤重复做同类事。比如生活中的流水线,大大提高了工作的效率

2)、计算机角度的程序

  • 和生活中的程序相同,就是操作者换成了计算机,让计算机代替人类重复这些步骤。
  • 然而计算机并不能理解人类的语言,需要将人话转化为能被计算机理解的二进制机器语言,这个过程就是编程
  • 机器语言分为低级语言(二进制代码,机器 只能识别二进制代码)、汇编言语和高级语言(Java、C#等对程序员可读性更强,更接近人类语言方式的各种高级语言)

2、选择C#学习的好处加粗样式**

  • 为.NET平台量身定做的新型开发语言,和JAVA平分秋色
  • 完全面向对象的开发语言
  • 在.netframework框架上可以直接开发各类应用(桌面、网站、移动、web服务等)
  • 上位机领域的主流语言

3、面向过程编程和面向对象编程的理解

1)、面向过程

  • 思想:以“过程/流程”为中心的编程思想
  • 方法:分析出解决问题的步骤,然后通过函数一一实现,需要时调用函数即可
  • 要求:设计各种函数,前后联系比较紧密
  • 适合:嵌入式开发。比如C语言,需要和硬件交互

2)、面向对象

  • 思想:以“事务/对象”为中心的编程思想
  • 方法:将程序分解为若干个基本单元(类/模块)单独研究类的属性和方法,然后通过对象的时间依次调用对象的方法完成任务即可
  • 要求:根据对象设计各个类,单独研究类的属性和方法的功能
  • 适合:应用管理系统。

4、面向对象三大特性

1)、封装

  • 模块开发者只关心模块内部的实现,模块调用者只关心模块的功能和接口
  • 封装后的代码安全性更高,更易于管理、团队协作性更高
  • 应用:类是程序的基本单元也是封装的基本单元

2)、继承

  • 优点:代码复用,更新分类,子类自动更新
  • 缺点:耦合性太强,不易维护,基本很少使用继承
  • 所有类继承字object类,所有窗体类都继承自form类

3)多态

  • 让一个程序的接口可以根据不同的需求做出不同的响应
  • 程序扩展容易,方便维护
  • 应用:继承多态、接口多态(简单工厂、抽象工厂)

5、开发者必须掌握的OOP原则

  • 对象职责明确原则:一个对象只做好一件事。高内聚、低耦合,提高稳定性
  • 开放封闭原则:需求变化时尽量少的修改类的设计,通过扩展类来完成
  • 依赖倒置原则(OOP精髓):基于接口编程,高层模块调用接口,底层模块实现接口,防止底层变化影响高层
  • 接口隔离原则:尽可能多的使用专用的小接口,而不是总接口,避免接口过于复杂
  • 里氏替换原则:在继承关系中子类可以替换父类,虚拟机可以根据父类变量动态的找到具体的子类对象,从而实现多态

6、.NET平台

1)、.NET平台的组成

  • 微软设计的一个应用于开发各类应用程序的框架和程序运行库
  • .NET平台的组成:.netframework框架和提供给开发人员使用的VS环境
  • 大大减少了开发量,底层模块由netframework框架提供

2)、.NET框架的组成



.netframework类库和公共语言运行库(CLR)
CLR又分为

  • CTS(通用类型系统):消除不同语言中的数据类型的差别
  • CLS(公共语言规范):消除不同语言的语法差异

7、解决方案与调试

1)、解决方案

  • 解决方案和项目都是VS提供的用于管理应用程序的容器
  • 一个解决方案可以包含一个或多个项目,这些项目可以相互独立,也可以相互联系
  • 通过解决方案提供统一编译各个项目

2)、生产解决方案

  • 解决方案生成成功代表代码没有编译错误,可以运行
  • 生成解决方案的目的就是“编译项目中的各个模块”

3)、调试与发布

  • debug:内涵大量调试信息,提供给开发人员使用,调试程序必须使用debug
  • release:项目最后发布的时候使用,去掉了调试信息,占用的内存更少

4)、解决方案资源管理器:用来专门管理解决方案的工具

8、基础术语掌握

1)、C#程序结构

2)、命名空间

  • namespace关键字:C#分类组织代码的方式。非常类似中国管理人口所实行的省市县乡制度。一个命名空间可以包含一个或多个类
  • 命名空间的分类:自定义(程序员根据需要定义)和系统命名空间(里面包含.NET平台提供的大量方法,using引用后可以直接使用)
  • using关键字:用来引用其他命名空间

3)、Class关键字:所有代码都要在类中,类要在命名空间中
4)、Main程序 入口方法

static void Main(string[] args){}
static void Main(){}
static int Main(string[] args){}
static int Main(){}

5)、注释

//单行注释/*
多行注释
*////文档注释,用于注释复杂方法或类#region 折叠器说明
折叠部分
#endregion

二)、变量、运算符与类型转换

1、通俗的内存分配理解和变量问题

1)、内存分配原理

  • 内存是计算机用于作为CPU与硬盘之间做缓冲作用的(CPU速度很快,硬盘速度很慢,二则速度不匹配造成大量浪费,所以使用内存进行数据缓冲)
  • 程序运行过程介绍:编写的程序存在硬盘中,运行程序时首先调到内存中,然后被CPU调用执行
  • 内存中数据分配是按照不同的类型进行分别存储,所以需要数据类型的概念进行区分,将不同的数据存储到不同的空间中

2)、变量的概念

  • 内存地址是一串十六进制数值,不方便人类阅读习惯和记忆,使用变量来代替十六进制数值
  • 定义变量实际上就是开辟一块空间
  • 变量的三要素:类型、变量名、变量值

3)数据类型
基本数据类型:数值、bool…
引用数据类型:对象、string…
4)、变量的定义和使用

  • 声明变量:根据类型申请内存空间
  • 变量赋值:将数据存储到申请的空间中
  • 使用变量:直接访问变量名即可使用值
static void Main(string[] args)
{ing age;//声明变量age = 10;//赋值Console.Write(age);//使用变量
}

5)C#中变量的命名

  • 只能数字、字母、下划线,除此之外不能包含任何其他字符
  • 不能以数字开头,禁止使用关键字、$、保留字等也不能使用
  • 多个单词组成是采用camel命名法(stuAge)
  • 严格区分大小写

6)、变量使用常见错误

  • 未声明先使用
  • 未赋值先使用
  • 非法变量名
  • 变量名重复
  • 使用了关键字

2、变量、常量与枚举

1)、常量

  • 在程序运行过程中,值永远不发生改变。为避免疏忽造成随意修改
  • 定义方法: const 数据类型 常量名 = 常量值;
  • 使用规范:常量名大写;必须在定义的时候就初始化;经常用、值不变或者很难理解的变量可定义成常量

2)、枚举

  • 分析:变量的值是随时可修改的、常量的值只有一个,但需要一组有限的值供上层选择时,就能使用枚举完成
  • 枚举的妙用在于可以避免非法数据的赋值。对值枚举内的值进行约束
  • 只能定义值,不能含有方法,一般定义在类的外部
  • 定义规范:访问修饰符 enum 枚举名 {值1,值2}

3、格式化字符串输出方法

1)、使用加号“+”进行拼接,但是限于少量拼接,太多会 很臃肿
2)、使用占位符

  • 格式:Console.Write("hello {0} ,wecome {1}",name,you)
  • 说明:{0}代表占位符,依次{0}、{1}…,与变量列表中的变量对应

4、运算符自加和操作

1)、a++ 和 ++a的区别:同样都是a = a+ 1;a = 1

  • a++会先使用完a后再进行加一Console.Write(a++);//输出 1
  • ++a是先进行加法再进行其他操作Console.Write(++a);//输出 2

5、数据类型转换

1)、自动转换

  • 两者都是值类型
  • 范围小的转范围大的
  • 比如整形转浮点类型会自动转换

2)、强制转换。 语法:(类型名)表达式
3)、字符串和值类型的相互转换

  • 条件:字符串必须是数字的有效变现形式
  • 案例:int a = int.Parse("29);float.Parse("23.3") 和 a.ToString();

4)、万能转换器
字符串转为double类型需要注意

  • 小数位大于或小于0.5原样转化
  • 如果小数位为0.5时,看整数部分,奇数进位,偶数不变

double转int需要注意:如果小数位大于0.5才进位,否则都舍掉小数位

三)、选择与循环结构

1、选择结构

1)if结构if(条件){代码部分}//条件成立才执行;多个if判断一般很少用,即使前面条件已经成立后面也还需要继续判断,造成性能消耗
2)、if-else结构:if(条件){条件为TRUE执行这里} else {条件为FALSE执行这里}
3)、if-else if()-else结构:if(条件1){条件1成立执行这里} else if(条件2){条件2成立执行这里} else {条件1和条件2都不成立时执行这里}哪个条件成立执行哪个,若条件1成立剩余的将不会再执行直接跳出怕判断
4)三元运算符表达式?结果1(TRUE):结果2(FALSE);======= 变量 = a > b? a:b;//条件为真
5)、Switch结构

switch(表达式)
{case 常量1:语句1;break;//等于常量1case 常量2:语句2;break;//等于常量2case 常量n:语句n;break;//等于常量ndefault:语句;break;//没有做好到匹配项
}
  • 若判断条件是等值条件(确切的值,如整型或字符型)时,使用Switch更方便
  • 和多重if相比较。多重if适合区间范围判断,Switch适合等值判断

2、 循环结构

1)、for循环

  • 使用条件:知道循环多少次的情况下使用for循环很方便
  • for 循环中的“表达式1(初始化条件)”、“表达式2(循环条件)”和“表达式3(自增或自减)”都是可选项,都可以省略(但分号;必须保留)。
  • 语法for(1初始化参数;2条件判断;4更新循环变量){3循环体}
  • for(ing i=0;i<10;i++){console.write(i+1);}
  • 两层for循环嵌套,外层循环控制行数,内层循环控制列数

2)while循环

  • 知道循环次数使用for循环,不会到循环多少次直到满足条件时就需要使用while循环
  • 使用步骤:分析循环条件和循环操作;使用while语法写代码;检查循环是否会跳出2
  • while(条件){代码块}

3)、do while循环

  • 不知道重复多少次使用while循环,while循环如果条件不成立时一次都不会执行,而我们需要执行一次任务时就得使用do while 循环
  • do{代码块} while(条件)

4)、while 循环和 do-while 循环的不同处如下:

  • 语法不同:与 while 循环相比,do-while 循环将 while 关键字和循环条件放在后面,而且前面多了 do 关键字,后面多了一个分号。
  • 执行次序不同:while 循环先判断,再执行。do-while 循环先执行,再判断。
  • 一开始循环条件就不满足的情况下,while 循环一次都不会执行,do-while 循环则不管什么情况下都至少执行一次。

5)、循环跳出

  • break终止整个循环。通常在循环中与条件一起使用
  • continue 结束本次循环,继续执行下一次循环。某些条件不满足时跳过

3、程序调试

1)、程序出错通常就是语法错误或者逻辑错误。语法IDE会提示但是逻辑错误需要程序员自行查找校验
2)、调试步骤

  • 设置断点:在可能出现错误的语句设置断点(需要大量的编程经验)
  • 单步运行:让程序停止到断点处后,逐条执行代码,避免一闪而过
  • 观察变量:观察变量的值和期望的值进行比较,找到问题原因并将之修改
    3)、需要调试的场合
  • 出现逻辑错误,无法得到期望的值
  • 出现异常,无法直接找出错误原因

四)、字符串、数组和变量类型

1、字符串

1)、字符串常用方法或属性

IndexOf(char/string value);//返回整型,索引从0开始
string.Length;//返回字符串长度
string SubString(int startindex,int length);//起始位置,截取长度
string.Format("字符串",参数列表); string.Fromat("{0:c3}",500);--->¥500
Trim();//去掉空格
ToUpper();//转为大写
ToLower();//转为小写
LastIndexOf(string value);//找到最后一个匹配项所在的位置
str.Split('分隔符');//通过分隔符分割成一个个字符串数组
string.Join("连接符",字符串数组);//返回字符串

2)、空字符串的使用方法
比较字符串的常用方法

string name="";//分配一个存储空间并存入“”空字符串
string name = string.Empty;//和“”一样,长度为0,更易读
string name = null 和 string name 相同,都是只声明,对象不存在

判断字符串是否为null的方法

name.Length == 0;//长度为0
name ==string.Empty;
name == "";
优先使用顺序从上到下

3)字符串高效拼接
加号拼接,每次修改都要创建一个字符串对象,影响性能
使用StringBuilder类进行拼接

  • StringBuilder类定义可变字符串,实现字符串追加的相关方法(Append/Insert/Remove等)
  • 使用场合:大量拼接字符串的时候可以提高效率和可读性

2、数组

1)、概念:用来存储相同数据类型的一组数据。变量存储一个数,数组连续存储一串相同类型的数
2) 数组基本要素:

  • 数组名(区分不同数组)
  • 元素(数组中存储的值)
  • 类型(元素的数据类型)
  • 下标(索引从0开始)

3)使用步骤:

int[] arr;//声明数组,告诉计算机数据类型是什么,不规定长度
arr = new int[5];//分配空间。告诉计算机分配几个连续的空间
arr[0]=2;//赋值。向对应的空间中存放数据
arr[1]=arr[0]+1;//使用数组。使用对应空间中的数据

4)、数组声明同时初始化的三种情况

int[] arr = new int[3]{2,3,4};//限制个数,只能输入三个值
int[] arr = new int[]{2,3,4};//不限制个数,个数由值得个数确定
int[] arr = {2,3,4);//往后经常使用这种方式

5)、遍历数组的新方法

foreach(元素类型 变量名 in 集合或数组名){语句}

3、变量类型




值类型被复制,复制的是值,和原来的变量没有关系;引用类型被复制,复制的是堆中的地址,指向的还是原来的对象

一、C#语法与编程逻辑相关推荐

  1. 程序人生:提高编程逻辑的 10 种最“疯狂”的方法

    如今,大部分学生对编程表现出了兴趣.甚至每个人都想成为一名程序员.编程为程序员提供了许多工作机会.除了那些最新的编程语言之外,与老式的机器级语言相比,它是相当简单的. 这些语言是 Forton.COB ...

  2. python编程基础语法-Python编程基础语法快速入门

    1. 课程咨询加老师助理微信:助理1微信: chenjinglei88 ,助理2微信: omf6757 2. 决定购买并想得到陈敬雷老师亲自指导(课程或自己项目难题均可)加老师微信: chenjing ...

  3. 锻炼编程逻辑_通过锻炼提高编程技巧

    锻炼编程逻辑 我们中的许多人都有一个2017年的目标,即提高我们的编程技能或首先学习如何编程. 尽管我们可以使用许多资源,但独立于特定工作来实践代码开发技巧需要一些计划. Exercism.io是为此 ...

  4. c语言出现了语法错误能编译吗,如何调试C程序的语法错误和逻辑错误

    如何调试C程序的语法错误和逻辑错误 语法错误] 语法错误,这是C语言初学者出现最多的错误,比如,分号":"是每个C语句的结束的标志,在C语句后忘记写":"就是语 ...

  5. 如何定位逻辑错误C语言,如何调试C程序的语法错误和逻辑错误

    如何调试C程序的语法错误和逻辑错误 语法错误] 语法错误,这是C语言初学者出现最多的错误,比如,分号":"是每个C语句的结束的标志,在C语句后忘记写":"就是语 ...

  6. java学习之编程逻辑训练

    java学习之编程逻辑训练 案例1:买飞机票 分析 需要输入的变量:季节(旺季/淡季可以与后面的月份合并),舱位(经济舱/头等舱,字符串类型),机票原价(应该是浮点型),月份(整型) 定义方法录入机票 ...

  7. python编程语法-Python编程入门——基础语法详解

    今天小编给大家带来Python编程入门--基础语法详解. 一.基本概念 1.内置的变量类型: Python是有变量类型的,而且会强制检查变量类型.内置的变量类型有如下几种: #浮点 float_num ...

  8. python编程if语法-Python编程入门基础语法详解经典

    原标题:Python编程入门基础语法详解经典 一.基本概念 1.内置的变量类型: Python是有变量类型的,而且会强制检查变量类型.内置的变量类型有如下几种: #浮点 float_number = ...

  9. python编程语法-Python编程入门——基础语法详解(经典)

    今天小编给大家带来Python编程入门--基础语法详解.温馨提示: 亮点在最后! 在这里还是要推荐下我自己建的Python开发学习群:301056051,群里都是学Python开发的,如果你正在学习P ...

最新文章

  1. Ubuntu 10.04 LTS 网站权限不够
  2. 技巧:MyBatis 中的trim标签,好用!
  3. 关于 DOM 操作的几个类型
  4. 【终极办法】windows下安装完MySQL,为什么cmd不识别命令?
  5. 【EXLIBRIS】纸版书目整理 -- 大书架 下 【64 种】【103 册】
  6. linux汇编stdin,汇编:从标准输入中读取整数,将其递增并打印到标准输出
  7. python画圆填色橙色_基于TPC-C基准的Python ORM的性能测试详解
  8. android文件关联之mime type
  9. grunt打包压缩css、js方法
  10. Colmap中depth_map部分的源码
  11. 我的第一个三菱FX5U程序
  12. acfun json 弹幕 转换 bilibili xml 弹幕
  13. RapidXML的读写
  14. java阅卷系统_基于jsp的考试阅卷系统-JavaEE实现考试阅卷系统 - java项目源码
  15. 连接局域网打印机用计算机名,如何连接局域网内共享的打印机
  16. 用U880做热点 使电脑上网(绑定usb和便携式wlan热点)
  17. USB_PD_R3_0 V1.1 PD协议 协议层 中文翻译
  18. 怎么看微信撤回的效果?教你看微信已撤回的消息、图片
  19. 自己写C#用汽车诊断卡对MIT电机做调试
  20. C# 关于类的继承的总结

热门文章

  1. 奢华酒店品牌施柏阁今年将进驻中国大陆;丹纳赫诊断平台中国研发制造基地在苏州动工 | 美通企业日报...
  2. 旧调重弹Hibernate与Ibatis区别--深入架构设计
  3. 2021年中国展览馆数量及举办展览情况分析:行业各项指标逐渐回升[图]
  4. 顶格排列怎么设置_教你美篇如何排版的小技巧
  5. java的split的正则_Java split方法和正则表达式
  6. 跨年句子迎接2021年的朋友圈说说 2021迎接新年的祝福唯美短句
  7. 大数据时代究竟带来了什么? ——写给普通人看的大数据文章
  8. 暴雪团队使用VS进行Linux平台崩溃分析
  9. 16.SVG线性渐变(Linear Gradient)
  10. c语言编写单片机跑马灯,用单片机编写几种跑马灯