1247人加入学习
(18人评价)
C#语言入门详解

C#语言中文课程的No1

价格 $99美元

先也不知道讲的啥子是事件

事件订阅者

事件参数

事件驱动

java 使用接口

[展开全文]

一,类型——又称数据类型

1.A data type is a homogeneous collection of values,effectively presented,equipped with a set of operations which manipulate these values.

2.是数据在内存中储存的“型号”

3.小内存容纳大尺寸数据会丢失精度,发生错误。

4.大内存容纳小尺寸数据会导致浪费。

5.编程语言的数据类型与数据的数据类型不完全相同。

二,强类型语言与弱类型语言的对比

1.C语言示例:if条件

2.JavaScript:动态类型

3.C#语言对弱类型/动态类型的模仿。

[展开全文]

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

 

类型转换

 

隐式(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;
   }
}

 

[展开全文]