C#语言入门详解

C#语言中文课程的No1

默认教学计划
482人加入学习
(9人评价)
价格 免费
教学计划
承诺服务

第十二讲:操作符详解(下)

 

类型转换

 

隐式(implicit)类型转换

  • 不丢失精度的转换
  • 子类向父类的转换
  • 装箱

显式(explicit)类型转换

  • 可能丢失精度(甚至发生错误),即cast
  • 拆箱
  • 使用Convert类
  • ToString方法与各类型的Parse/TryParse方法

自定义类型转换操作符

 

 

 

 

[展开全文]

第十一讲:操作符详解(中)

 

var关键字

 

new操作符

花括号{}调用初始化器

语法糖衣

匿名类型

checked unchecked检查一个值在内存中是否有溢出

  • 关键词用法
  • 上下文用法

显示一个值x的二进制Convert.ToString(x, 2)

 

delegate委托

匿名方法

lambda表达式->用于事件响应

 

sizeof获取结构体数据类型实例在内存中占的字节数

 

 

[展开全文]

第十讲:操作符详解(上)

 

本机内容

  • 操作符概览
  • 操作符的本质
  • 操作符的优先级
  • 同级操作符的运算顺序
  • 各类操作符的示例

 

操作符重载

operator操作符

 

操作符的优先级

 

VS快捷键:

  • Ctrl+D:复制本行到下一行
  • Ctrl+L:删除本行
  • Alt+Up/Down:上下移动本行
  • Ctrl+Left/Right: 一次可以移动一个单词
  • Ctrl+Up/Down: 滚动代码屏幕,但不移动光标位置
  • Ctrl+G: 转到指定行

 

  • typeof操作符
  • default操作符 获取某个类型的默认值

 

 

 

 

[展开全文]

第九讲:方法的定义、调用与调试(下)

构造器

  • 构造器(constructor)是类型的成员之一
  • 狭义的构造器是指"实例构造器"(instance constructor)
  • 如何调用构造器
  • 声明构造器
  •  

Code Snippet:

  • ctor
  • cw

方法重载(Overload)

方法签名必须不同, 方法签名不包含返回类型. 构成方法签名的要素有: 

  • 方法名称
  • 类型形参及其个数
  • 形参的类型、个数和种类(值类型, ref或out类型)

重载决策: 用于在给定参数列表和一组候选函数成员的情况下, 选择一个最佳函数成员来执行.

 

Debug

  • 设置断点
  • 观察方法调用时的call stack
  • Step in, Step-over, Step-out
  • 观察局部变量的值和变化

作业

  • 理解并熟记所有概念
  • 完成视频中的实例,直至能够默写

 

 

[展开全文]

第八讲:方法的定义、调用与调试(上)

 

知识点

 

  • 方法的由来
  • 方法的定义与调用
  • 构造器(一种特殊的方法)
  • 方法的重载(Overload)
  • 如何对方法进行debug
  • 方法的调用与栈

<<CLR via C#>>

<<C# in depth>>

方法的由来

  • 方法(method)的前身是C/C++语言的函数(function), 并由此派生而来.

shift+右击资源管理器空白处->可以打开 在此处打开命令行窗口

  • 方法永远都是类(或结构体)的成员
  • 是类(或结构体)最基本的成员之一

为什么需要方法和函数

  • 隐藏复制的逻辑
  • 把大算法分解为小算法
  • 复用

声明方法的语法详解

静态方法(static)

 

形参与实参

  • Parameter形参, formal parameter
  • Argument实参

 

[展开全文]

第七讲:详解类型、变量与对象(下)

 

C#的五大数据类型

  • 类(Classes): 如Window、Form、Console、String
  • 结构体(Structures): 如Int32、Int64、Single、Double
  • 枚举(Enumerations): 如HorizontalAlignment、Visibility
  • 接口(Interfaces)
  • 委托(Delegates)

 

查看某个类的源代码, 将光标置于某个类名上, 然后按F12键.

 

C#类型的派生谱系

引用类型(Reference Type)

值类型(Value Type)

7种变量

  1. 静态变量(成员变量, 字段)
  2. 实例变量
  3. 数组元素
  4. 值参数
  5. 引用参数
  6. 输出形参
  7. 局部变量

狭义的变量指局部变量.

声明一个变量:

有效的修饰符组合opt 类型 变量名 初始化器opt

 

值类型的变量

  • 以byte/sbyte/short/ushort为例
  • 值类型没有实例, 所谓的"实例"与变量本身合二为一

变量在内存中的存储方式: 变量是以变量名所对应的内存地址为起点、以其数据类型所要求的存储空间为长度的一块内存区域.

  • 引用类型的变量与实例

引用类型变量与实例的关系: 引用类型变量里存储的数据是对象的内存地址

  • 局部变量是在stack上分配 内存
  • 变量的默认值
  • 常量: const, 值不可改变的变量
  • 装箱与拆箱(Boxing & Unboxing)

作业

  • 理解并熟记所有概念和知识
  • 对照视频写示例程序, 直至能够默写

 

 

[展开全文]

第六讲:详解类型、变量与对象(上)

知识点

  • 什么是类型
  • 类型在C#语言中的作用
  • C#语言的类型系统
  • 变量、对象与内存

什么是类型?

类型(Type), 又称数据类型(Data Type)

A data type is a homogeneous collection of values, effectively presented, equipped with a set of operations which manipulate these values. 也即以一种有效的方式呈现的相同类型的值, 并针对此类型定义了一系列的操作.

 

强类型语言与弱类型语言的比较

  • C语言示例: if条件里可以使用赋值运算符
  • JavaScript示例: 动态类型
  • C#语言对弱类型/动态类型的模仿

var关键字, 与JS中不同

dynamic关键字: C#中对动态类型的模仿

 

数据类型在C#语言中的作用

 

  • 存储此类型变量占用内存空间的大小
  • 此类型的最大、最小范围
  • 此类型包含的成员(如方法、属性、事件等)
  • 此类型由何基类派生而来
  • 程序运行的时候,此类型的变量在分配的内存的什么位置
  • 此类型所运行的操作(运算)

 

反射

  • Type类
  • Type.GetProperties()方法
  • Type.GetMethods()方法
  • typeof运算符
  • xInstance.BaseType.nBaseType.FullName属性

变量在内存中的位置

  • Stack(栈)简介
  • Stack Overflow
  • Heap(堆)简介
  • 使用Performance Monitor查看进程的堆内存使用量
  • 关于内存泄露

运行->输入perfmon, 打开性能监视器

 

[展开全文]

第五讲:C#语言基本元素概览,初识类型,变量与方法,算法简介

 

构成C#语言的基本元素

标记(Token)

  • 关键字(Keywords)
  • 操作符(Operators)
  • 标识符(Identifiers)
  • 标点符号
  • 文本
  • 注释与空白

关键字(104个)

关键字是对编译器具有特殊意义的预定义保留标识符。 它们不能在程序中用作标识符,除非它们有一个 @ 前缀。 例如,@if 是有效的标识符,但 if 不是,因为 if 是关键字。

操作符(运算符)

C# 提供大量运算符,这些运算符是指定在表达式中执行哪些操作的符号。 整型运算包括 ==、!=、<、>、<=、>=、binary +、binary -、^、& | 、~、++、-- 和 sizeof(),通常在枚举时允许这些运算。 此外,很多运算符可被用户 重载,由此在应用到用户定义的类型时更改这些运算符的含义。

 

标识符

  • 什么是合法的标识符
  • 怎样阅读语言定义文档?
  • 大小写规范
  • 命名规范

标点符号

 

文本(字面值)

 

 

简要介绍类型、变量和方法

xInstance.GetType().Name

类型Type, 也称数据类型(Data Type)

变量是存放数据的地方, 简称"数据"

  • 变量的声明
  • 变量的使用

方法, 处理数据的逻辑, 又称"算法"

  • 方法的声明
  • 方法的调用

 

算法简介

  • 循环初体验
  • 递归初体验
  • 计算1到100的和

作业

  • 对照视频完成示例, 直到能够默写
  • 独立完成"汉诺塔问题"

 

[展开全文]

第四讲:类,对象,类成员简介

类与对象的关系

  • 类是对现实世界事物进行抽象所得到的结果
  • 对象也叫实例, 是类经过实例化后得到的内存中的实体
  • 实例化: 依照类, 我们可以创建该类的对象, 这就是实例化
  • new操作符实例化类

类的三大成员

  • 属性(Property):存储数据, 组合起来表示类或对象的当前状态
  • 方法(Method)
  • 事件(Event):类或对象通知其他类或对象的机智, 为C#所特有;善用事件机制非常重要

DispatcherTimer类

静态成员与实例成员

  • 静态(Static)成员在语义上表示它是"类的成员"
  • 实例(非静态)成员在语义上表示它是"对象的成员"
  • 绑定(binding)指的是编译器如何把一个成员与类或对象关联起来
  • .操作符, 用于成员访问

快速输入Code Snippets: 当出现代码提示时, 连续按2次Tab键.

作业

跟着视频进行操作, 知道能够自己动手编写这些程序

 

 

[展开全文]

第三讲:初始类与名称空间

知识点 

  • C# Language Specification
  • class 和 namespace
  • Console.WriteLine()方法
  • using使用命名空间
  • static void Main()静态程序入口
  • Help Viewer查看帮助, 如索引中输入Console class查看Console类的描述
  • Ctrl+.快捷键

类库的引用

在项目中References(引用)里查看引用的库.

  • DLL引用: 黑盒引用, 无源代码
  • 项目引用: 白盒引用, 有源代码

添加引用的方法:

  1. 引用已知的dll类库 右击项目下的References(引用)项, 点击Add Reference(添加引用)->浏览->找到需要的dll引用文件
  2. 引用未知的系统类库: 首先使用Help Viewer找到相关的类, 在Assembly中找到该类所在的类库名称, 然后使用方法1添加到项目中即可
  3. NuGet引用: 右击项目名或项目下的引用->点击 管理NuGet程序包, 使用EntityFramework
  4. 项目引用: 首先在当前solution里添加现有项目, 将需要被引用的项目添加到当前项目下, 然后对对当前项目 添加引用->solution下的Projects->添加即可

依赖关系

  • 类(或对象)之间的耦合关系
  • 高内聚低耦合
  • UML类图

排错

  • 仔细阅读错误提示
  • 阅读文档与动手实践相结合

 

 

[展开全文]
class WrapFatory
{
  public Box WrapProduct(Func<Product> getProduct)
   {
     Box box = new Box;
     Product product = getProduct.Invoke();
     box.Product = product;
     return box;
   }
}

 

[展开全文]

总结:看完视频后,要敲代码才能学的快。

 

[展开全文]

C# 语言简介

编程的学习路径

  • 纵向:语言 -> 类库 -> 框架
  • 横向:命令行程序,桌面程序,设备(平板/手机)程序,Web(网站/服务),游戏……

类库可以理解为轮子,框架是有一定逻辑组织的类库集。 
框架就是在开发时的最佳方案(Best practice),把类库已经组合好了。

 

开发环境与学习资料

Visual Studio(可见工作室) 所见即所得

学习资料

MSDN 文档的重点是 C# Programming Guide,C# Reference 

 

复习笔记

面向对象

本课程主要是将大家领进门,高中水平就可以学。

计算机如何从底层 0 1 到现代软件工程的,推荐去看 Crash Course 的计算机科学速成课(B站有中文字幕版)。

C# 程序员找类库的最好方法是根据关键字去 Nuget 搜索。

现在也可以用 Visual Studio Code 作为 .NET Core 程序的集成开发环境。

ReSharper 是 VS 最强的插件,它最强大的功能是识别你的代码并给出更完善、更现代化写法的建议,可惜它也有一大劣势,太占内存了。

PS:据说 VS2019 将有智能代码修改建议功能,期待吧。

以前是 MSDN,现在新版的叫 Microsoft Docs

MSDN 文档内容过多,很容易迷失于其中,此时可以用《C# 5.0 In A NutShell》作纲领,明确那些知识是重点,和学习知识点的先后顺序。

[展开全文]

C#/cs

基础概念:

Solution: 针对用户需求的解决方案

ProjectSolution中解决具体的问题

 

 

一款软件中的项目

常有新潮

数据库

网络服务

网站

手机

平板电脑

 

 

C# 技术:

新技术

不在 Visual Studio Express 2013 里面

Console(控制台):

添加Console.WriteLine("Hello World");

 

WPF(Windows Presentation Foundation):

从Toolbox里面添加Textbox和Button

点击Button

从Button里面找到Events

Events里面找到Click

双击Click

添加TextboxName.Text = "Hello World";

 

Windows Forms(Old):

从Toolbox里面添加Textbox和Button

从Button里面找到Events

Events里面找到Click

双击Click

添加TextboxName.Text = "Hello World";

 

ASP.NET Web Forms (Old)(ASPX):

删除两个<body>之间的Code

添加<h1>Hello, World<h1>

 

ASP.NET MVC (Model-View-Controller):

添加 Controller

右击函数后选择 Add View

添加<h2>Hello, World<h2>

 

WCF (Windows Communication Fundation):

IService1.cs里面

在Composite TypeGetDataUsingDat(CompositeType Composite);下面添加[OperationContact]

string  Name();

Service1.svc.cs里面:

组合键Ctr,+,选第一项, 按Enter

剪掉原来 Public String Name(){}里面的程序

添加 return "Hello, World"

在Name()按Invoke建

 

Windows Store Application:

从Toolbox里面添加Textbox和Button

点击Button

从Button里面找到Events

Events里面找到Click

双击Click

添加TextboxName.Text = "Hello World";

 

Windows Phone Applcation:

从Toolbox里面添加Textbox和Button

点击Button

从Button里面找到Events

Events里面找到Click

双击Click

添加TextboxName.Text = "Hello World";

 

Cloud (Windows Azure):

添加 Controller

右击函数后选择 Add View

添加<h2>-Hello, World<h2>

 

WF(Workflow Fundation):

从Toolbox里面添加WriteLine

添加“Hello,World”

 

 

[展开全文]

语言的种类

最原始的程序为0(关闭)和1(打开)组成的电脑可以理解的机器语言(效率低)

改成了以人类语言一对一机器语言汇编语言

人类又改用更像人类语言高级语言写程序

编译器将高级语言转换为机器语言, 让人类可以写更简单的程序

 

程序的用处

让人可以使用硬件(计算机一类)来做事情

随着硬件的发展, 软件也更厉害了

它们组成操作系统(Windows, Macbook, etc), 让人类可以掌控更复杂的硬件

程序在硬件的基础上让它能做更多的事情, 实现用户的需求(text editor, 软件,web)

 

下载完后:

press Tools 键

press options 键

press startup 键

把 At startups:设成Show empty environment

press OK 键

重启 Visual Studio

press HELP 键

press Add and Remove Help Content 键

press manage content 键

添加Visual Basic and Visual C#, Desktop development, Windows debugging, Windows Desktop App development

 

网站:

下载 Visual Studio 2017:

http://www.visualstudio.com(也是https://visualstudio.microsoft.com(2018时查的))

下载 Visual Studio 2013 Windows Desktop:

https://my.visualstudio.com(需要microsoft account, 可以注册)

C# 5.0 语言定义文档(for 2018):

https://www.microsoft.com/en-us/download/details.aspx?id=7029

p.s. :请大家帮我揪揪有没有错误

[展开全文]