C#程序设计.唐大仕.01.C#程序设计简介

C# 程序设计简介

C# 语言简介

  • 历史
    • C(60年代) -> C++(面向对象,内容多,复杂) -> Java(1995) -> C#(2001/2002)
    • Java:C++--
  • 面向对象
  • 简单,安全
  • 与 Web/Mobile 的紧密结合
  • C#之父 —— Anders Hejlsberg
    • pascal 的发明者之一
  • C# 为了对抗 Java 而推出的

.NET

  • 通用的编程模型
  • 包括客户端、服务器和应用服务
  • 开发工具

历程

跨平台

  • 现在推出的 .NET Core 是其跨平台的版本
    • https://dotnet.github.io/
    • 微软开布的跨平台的开源系统
    • 可运行于 linux 及 mac 平台上
    • 类库大部分是兼容的
    • 开源的 mono 项目可以有 gui 界面
      • https://www.mono-project.com/
  • 另外 ,还有用 C# 开发跨平台的手机程序
    • Xamarin
  • .Net 5 整合了 .net standard, .net core, mono 等
    • 即将发布

.NET 5

.NET 版本

架构、语言、工具

统一的编程 API:NET Framework 类

.NET 主要特性

  • 简单的开发和部署
  • 统一的编程模型
  • 提供健壮、安全的执行环境
  • 支持多种编程语言
  • 丰富的类库支持

公共语言运行时( CLR )

  • common language runtime
  • 设计目标
    • 简化开发:安全性、内存管理
    • 简化应用程序部署
    • 基类库
    • 支持多种语言
  • 相当于 Java 中的虚拟机

编译和执行

  • .exe 文件中不是 CPU 指令,而是中间代码,在执行的时候即时编译成本机代码执行
    • IL 指令( Intermediate Language) CIL MSIL
    • 元信息
  • 反编译的工具
    • ildasm.exe 或用 ILSpy
    • C:FilesSDKs.1A.1 Tools

学习网站

C# 快速入门

  • windows 窗体程序
  • Shift+F7:界面设计
  • 修改属性:属性窗口
  • 添加事件:属性窗口中的 “闪电” 标志

  • 保存

    • 程序文件 .cs
    • 工程文件 .csproj
    • 解决方案 .sln
  • 对象

    • 属性 property
    • 方法 method
    • 事件 event

    1
    2
    3
    this.button1.Click += new System.EventHandler(this.button1_Click);
    // 或简写如下
    this.button1.Click += this.button1_Click;

  • Timer 控件可以设置自动触发事件

1
2
3
4
5
6
// 使用(导入)
using System.Windows.Forms;
// 命名空间(为了我们的类和别人的不重名)
namespace xxxxxx{...}
// 继承(用冒号表示)
public class Form1 : System.Windows.Forms.Form
  • 自动生成的代码
    • 对象的生成(new)
    • 事件的注册(+=)
  • 如果设置了控件的 autosize 属性为 true,那么 size 属性失效

基本应用类型

常见应用程序类型

  • 控制台程序
  • Windows 应用程序
    • WPF 程序
  • Web 应用程序
    • Mobile 应用程序

控制台程序

  • helloworld.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleDemo1 {
class Program {
static void Main(string[] args) {
Console.WriteLine("Hello World!");
}
}
}
  • 类定义
    • 程序的基本组成部分是类(class),如本例中的HelloWorld类。
  • Main() 方法
    • 程序的入口是Main()方法。它有固定的书写格式:
      • public static void Main(string [] args) {}
      • 可以没有 public,可以没有 string [] args
  • ctrl + F5 能够让程序运行完停一会

Windows 应用程序

  • 又被称为是 WinForm 应用
  • 可视化的设计窗体
  • 事件驱动的编程机制

WPF 程序

  • Windows Presentation Foundation
  • 在 Windows 上运行
  • 使用 XML(xmal)来定义界面

Web 应用程序

  • 在.NET中也称 ASP.NET 应用程序
    • Active Server Page
  • 应用程序在服务器上运行,客户端使用浏器(如IE)来进行输入输出
  • 使用 html/css 来定义界面
  • 这种方式称为 B/S(Browser/Server)方式
  • 与传统的 C/S(Client/Server)相区别
  • B/S 应用程序在使用、部署上有独特的优势

Mobile 应用程序

  • 又称 Windows Phone 程序
  • 运行于手机、PDA 等移动设备
  • 大部分类是与 windows 兼容的,但功能有裁减
  • 另外,Xamarin 可以开发跨平台的手机应用
    • (win phone, android, iphone)

比较

程序中的输入与输出

WinForm

  • 直接使用控件实现
  • 在 win10 中,默认缩放为 125%,winform 的 .exe 文件会有放大模糊的问题
    • 可以对 bin/Debug/xxx.exe 进行如下设置
    • 属性 -> 兼容性 -> 更改高 DPI 设置 -> 替代高 DPI 缩放行为,缩放执行:应用程序

控制台应用程序

1
2
3
4
5
6
7
8
9
10
11
using System;
namespace ConsoleDemo1 {
internal class Program {
public static void Main(string[] args) {
string s = "";
Console.Write("Please input a line: ");
s = Console.ReadLine();
Console.WriteLine("You have entered: {0}", s);
}
}
}

开发工具

一些开发工具

EditPlus 配置

设定语法加亮文件

  • Tools|Preferences|Settings & Syntax|Add
  • 描述填 csharp, 文件扩展名 cs;aspx
  • 选择语法加亮文件 csharp.stx

配置编译工具

  • Tools | Config User Tools | Add
  • MenuText 填:Compile C#(编译C#)
  • Command 选:D:.NET.0.50727.exe
  • Argument 填:/unsafe $(FileName
  • InitDir 填:$(FileDir)
  • 打勾:Capture Output

配置运行工具

  • Tools | Config User Tools | Add
  • MenuText 填:Run C#(运行C#)
  • Command 填:cmd /c
  • Argument 填:$(FileNameNoExt).exe
  • InitDir 填:$(FileDir)
  • 不打勾:Capture Output

notepadd++

  • NppExec 插件
1
2
3
4
5
## 编译
cmd /K cd /d $(CURRENT_DIRECTORY) & "C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\MSBuild\15.0\Bin\Roslyn\csc.exe" /unsafe "$(NAME_PART)".cs & exit

## 运行
cmd /K cd /d $(CURRENT_DIRECTORY) & "$(NAME_PART)".exe & exit

命令行

1
2
3
4
5
6
7
8
9
10
## 编译
csc.exe /unsafe xxx.cs
## (1)
csc xxxx.cs
## (2)
## 其中 /r:引用类库 /t:表示目标类型(还可以为library)
csc /r:System.Data.dll /t:exe /out:xxxx.exe xxxx.cs

## 运行
xxx.exe