乐趣区

关于c#:C速成指南从入门到进阶实战WPF与Unity3D开发吾爱

下栽地止:https://lexuecode.com/4375.html

C# 基础知识

根底语法
你如果后期学习过 C 语言的话,那么学习 C# 基础知识就会感觉很容易,特地好了解。在这个环节你须要认真学习基础知识,你得学会在保障语法不报错的状况下,利用基础知识写一些简略的算法;得纯熟理解语法,应用切当并能够实现一些逻辑代码。

(根底语法、数据类型、变量、循环、办法、数组、汇合、判断、类等)

面向对象开发
C 语言是面向过程的开发语言,而 C#是面对对象的开发语言,在应用 C 语言写逻辑代码时都是能够依照肯定的顺利逻辑将其实现就 OK,而 C# 就不一样,你在学习语法,实现业务逻辑时得思考程序的可扩展性,鲁棒性等。

你得领有抽象思维,能够将事实中无生命体征的物品进行拟物解决,将它们进行更为形象的提炼,汇总为某个非凡类,让其这个类代表这类物品,并让其领有这个物品的所有属性和行为,这就是面向对象开发。

(继承、封装、多态、接口、抽象类等)

这一部分的学习比拟形象,学会领有抽象思维,让本人能够更好的了解这些知识点。

基础知识进阶
这里你将会学习一些高端的编程玩法,可能短期内,你无奈应用到,然而它们更多体现在你的职业前期,当你理论应用框架或者浏览源码的过程中,都会遇到这些知识点,并有可能被它困住。

C# 速成指南:从入门到进阶,实战 WPF 与 Unity3D 开发
集成开发环境
Visual Studio

构造
using System;
蕴含 System 命名空间

class hello{/正文/

static void Main(string\[\] args){// 一个文件一个 main 函数}

}
构造体
struct Books{变量 …}
构造不反对继承。
构造不能申明默认的构造函数

枚举
enum Day {Sun, Mon, tue, Wed, thu, Fri, Sat};
Day.Sun==0

Day.Mon==1

接口
public interface PaintCost {int getCost(int area);}
派生类
class Rectangle : hello, PaintCost{}
全析
namespace first{
命名空间申明

public class Test{

能够多个 class
构造函数、析构函数、动态成员 …

变量 …

    decimal a=10;

128 位准确的十进制值,28-29 有效位数

    sbyte b=2;

8 位有符号整数类型

    uint c;

32 位无符号整数类型

    ulong d;

64 位无符号整数类型

    ushort e;

16 位无符号整数类型

    dynamic f=a,g=b;

存储任何类型的值在动静数据类型变量中

字符串

    "hhh\"hhh\nhhh"    ==
    @"hhh"hhh\nhhh"    ==
    @"hhh"hhh
        hhh""hhh" + "hhh"

字符串一堆办法:拆分,复制 …

可空类型,即能够赋值为 null

    int? a,b=null;    //a==null
    int a;        //a==0

合并运算符

    int b=a ?? 5;    // a 为 null 则 b =5, 否则 b =a

多维数组

    int [,] a = new int [3,4] {{0, 1, 2, 3} ,    /*  初始化索引号为 0 的行 */
        {4, 5, 6, 7} ,    /*  初始化索引号为 1 的行 */
        {8, 9, 10, 11}    /*  初始化索引号为 2 的行 */
        };

交织数组

    int[][] scores = new int[5][];
    for (int i = 0; i < scores.Length; i++) 
        scores[i] = new int[4];

Array 类

    scores.Rank;    // 获取数组的秩(维度)scores.Length;
    Array.Copy(Array, Array, Int32);
    /* 从数组的第一个元素开始复制某个范畴的元素
        到另一个数组的第一个元素地位 */

其余运算符

    &a    // 地址
    *a    // 指针
    obj is Car    // 查看 obj 是否是 Car 类的一个对象。obj as int    // 强制转换,即便转换失败也不会抛出异样。

常量

    const

其余常量例如 8 进制数

    0213

装箱与拆箱

    object obj;
    obj = 100;     // 这是装箱
    int a=obj as int;    // 这是拆箱

循环

    foreach(变量 in 数组){}

办法 …

    public int plus(int a){return a+1;}

重载

    public int plus(char a){return a+2;}

运算符重载

    public static Box operator+ (Box b, Box c){...}

可重载

+, -, !, ~, ++, — (op-type operand)

+, -, *, /, %,==, !=, <, >, <=, >= (op-type operand, op-type2 operand2)

不可间接重载

&&, ||

不可重载

+=, -=, *=, /=, %=,=, ., ?:, ->, new, is, sizeof, typeof

按值传递

    (int a)    

援用

    (ref int a)

按输入传递,即变量最初一个值赋回去

    (out int a)

传递数组给函数

    (int[] a)

参数数组

    int plus(params int[] arr)

传递时:

    plus(512, 720, 250, 567, 889)

拜访权限

public:所有对象都能够拜访;
internal:同一个程序集的对象能够拜访;
protected internal:拜访限于以后程序集或派生自蕴含类的类型。

}

}
命名空间申明

namespace second{

public class Test{}

嵌套命名空间

namespace second{}

}
命名空间使用

class TestClass{

void hhh(){
    first.Test;
    second.Test;
}

}
using 指令

using second; //using 指令:引入命名空间
using static System.Math; // 指定无需指定类型名称即可拜访其动态 > 成员的类型
using Project = PC.MyCompany; // 起别名
using (Font font3 = new Font(“Arial”, 10.0f), // 将实例与代码绑定

     font4 = new Font("Arial", 10.0f))

预处理器指令

define PIQ // 定义一系列成为符号的字符

if(PIW) {不会执行} // 测试符号是否为真

elif(PIQ) {会执行}

else {}

endif // 指定一个条件指令的完结

undef PIQ // 勾销定义符号

line number filename // 批改编译器的行数以及(可选地)输入错 > 误和正告的文件名

line default // 复原默认行号

error 你错了!// 从代码的指定地位生成一个谬误

warning 你就错了!// 从代码的指定地位生成一级正告

pragma warning disable 169 // 勾销编号 169 的正告(即字段 > 未应用的正告)

pragma warning restore 169 // 复原编号 169 的正告

region // 在应用 Visual Studio Code Editor 的纲要个性时,指定一个可开展或折叠的代码块

endregion // 标识着 #region 块的完结

示例用法

define CONNECT(a,b) a##b //## 粘连两个标识符,只有宏定义中应用(#define)

int CONNECT(a,1); //int a1
传统形式:

typedef struct _tag_Student Student;
struct _tag_Student{

char* name;
int id;

};
用宏定义形式

define STRUCT(type) typedef struct _tag_##type type;\

           struct _tag_##type

STRUCT(Student){

char* name;
int id;

};
异样解决

try {throw a;} // a 为 throwable
catch(a) {}
finally {}
在 catch 块中应用 throw 语句来抛出以后的对象

class _throw{
void _throw(){
try{

MethodThatThrowsException();

}
catch (Exception ex){

// 和基本不存在这个 catch 块的时候一样
throw;

}
catch (Exception ex){

//stack trace 认为你 catch 到的异样曾经被解决了
// 只不过处理过程中又抛出新的异样
// 这时候 stack trace 就把 throw ex; 当作谬误本源了
throw ex;

}
catch (Exception ex){

//stack trace 会主动认为外部异样是导致以后异样的起因
// 也就会把外部异样的 stack trace 也递归显示进去
throw new Exception("oops!", ex);

}
}}
System.ApplicationException 类:

反对由应用程序生成的异样。所以程序员定义的异样都应派生自该类。

输出与输入

using System;
class _IO{
void _IO(){

console.write("C# 很迷");
console.writeline("显示的信息");
Console.WriteLine("第一个学生的姓名{0}, 问题{1}",name1,score1);
    //“格局字符串”和变量列表,当有多个变量须要输入时能够应用该办法
    //{0}、{1}叫做占位符,代表前面顺次排列的变量表
console.readkey();    // 期待用户按下任意键,一次读入一个字符
console.readline();    //string, 当用户按下 enter 键的时候一次读取一行
convert.toint32/todouble("32"); //convert 用于不同类型数据之间的转化
int.Parse("32");    // 这个也能转化

}}
正则表达式:匹配专用,能够用于输出 readline()的整顿

Regex 类用于示意一个正则表达式

本人去看吧~

文件的输出与输入

个性,相似于 Java 的 / */,生成阐明正文

[attribute(positional_parameters, name_parameter = value, …)]
class || method || 变量 ……
本人去看吧~

反射:

容许在运行时查看个性(attribute)信息。
容许审查汇合中的各种类型,以及实例化这些类型。
容许提早绑定的办法和属性(property)。
容许在运行时创立新类型,而后应用这些类型执行一些工作。

不平安代码

因为 C# 中申明的变量在内存中的存储受垃圾回收器治理;因而一个变量(例如一个大数组)有可能在运行过程中被挪动到内存中的其余地位。如果一个变量的内存地址会变动,那么指针也就没有意义了。

解决办法就是应用 fixed 关键字来固定变量地位不挪动。

int[] list = {10, 100, 200};
fixed(int *ptr = list)
或者在办法上表明 unsafe

public unsafe static void Main(){

int var = 20;
int* p = &var;

}
或程序里表明 unsafe

unsafe{int var = 20;

int* p = &var;

}
留神,编译时须要命令行编译或者批改编译器设置

C# 高级常识

C# 速成指南:从入门到进阶,实战 WPF 与 Unity3D 开发,对于高级常识局部这个环节,你能够试着做出点理论我的项目进去,不论是 ADO.NET 还是 ASP.NET MVC 或者 ASP.NET Web API,你都能够先跟着书本或者视频教程,先让本人会用继而模拟看他人的写法,本人也入手进行实现。

你能够在 Github 或者 Gitee 中找到一些开源的我的项目,比方图书管理系统、博客零碎,论坛等一系列应用高级常识来实现的我的项目,你须要先浏览代码,看他人是如何实现的,从而在仿照他人的实现过程来依照本人的想法编写本人的零碎。(通过这样的实战我的项目,你能够疾速的上手实现,学着并尝试做一个全栈开发,本人一个人从前端到后端再到公布上线,体验下整个软件我的项目的残缺生命周期)。

ADO.NET: 它是最原始的数据库拜访技术,目前根本都不应用,市面上公司都是应用封装好的 ORM,然而你也得学习它。你得理解它是如何和数据库进行交换的,尝试着本人做这些步奏,看是否能顺利连贯数据库,并进行一系列的 CRUD 操作。

ASP.NET MVC:它是微软将模型 - 视图 - 控制器的编程思维进行程序化的一种实现,你学习它能够疾速上手实现一个网站,通过这个技术你能够实现本人的想法,比方做个图书管理系统等,在联合之前学习的 ADO.NET 技术,就能够将前端到数据库都买通了。

ORM:ORM 简称对象关系映射,是一种程序设计技术,用于实现面向对象编程语言里不同类型零碎的数据之间的转换。目前在 C# 语言中比拟风行的有 Entity Framework,NHibernate,SqlSugar(国内)。这块你次要学习 EF 就能够,其余的编程思维都是想通的,你只有学会应用其中一个,其余的简略学习下技巧就很快能上手。

ASP.NET Web API:它是一种实现前后端拆散的后端技术(SPA),也是目前市场上大家广泛应用的技术,通过它能够很简略的实现 SPA,后端开发人员只须要编写后端的业务代码,通过 API 暴露出拜访接口,可供前端人员进行应用。

退出移动版