笔记会持续更新,有错误的地方欢迎指正,谢谢!
一、基础
0.输入输出
函数 Console.ReadLine(),用于接收来自用户的输入,并把它存储到一个变量中
Console.WriteLine(“Length: {0}”, length);//输出
Console.WriteLine(“Hello World”);//输出
1.C# 数据类型
引用类型(Reference types):指的是一个内存位置。
对象(Object)类型:当一个值类型转换为对象类型时,则被称为 装箱;另一方面,当一个对象类型转换为值类型时,则被称为 拆箱。
之前由值类型转换而来的对象类型再转回值类型
- <code style="display: block; padding: 0px; font-family: Consolas, Inconsolata, Courier, monospace; font-size: 14px; line-height: 22px; border-radius: 4px;" class="hljs cs has-numbering">int val= 8;
- object obj = val;//先装箱
- int nval = (int)obj; //再拆箱</code>
字符串(String)类型:
C# string 字符串的前面可以加 @(称作”逐字字符串”)将转义字符(\)当作普通字符对待,比如:
- <code style="display: block; padding: 0px; font-family: Consolas, Inconsolata, Courier, monospace; font-size: 14px; line-height: 22px; border-radius: 4px;" class="hljs cs has-numbering">string str = @"C:\Windows";
- //等价于:
- string str = "C:\\Windows";</code>
2.C# 类型转换
• 隐式类型转换 - 这些转换是 C# 默认的以安全方式进行的转换, 不会导致数据丢失。例如,从小的整数类型转换为大的整数类型,从派生类转换为基类。
- <code style="display: block; padding: 0px; font-family: Consolas, Inconsolata, Courier, monospace; font-size: 14px; line-height: 22px; border-radius: 4px;" class="hljs cs has-numbering">long lnum = inum;//隐式转换,将int型数据转换为了long型的数据
- Class1 c1 = new Class2();//隐式,将一个新建的Class2实例转换为其基类Class1的实例c1</code>
• 显式类型转换 - 即强制类型转换。显式转换需要强制转换运算符,而且强制转换会造成数据丢失。
- <code style="display: block; padding: 0px; font-family: Consolas, Inconsolata, Courier, monospace; font-size: 14px; line-height: 22px; border-radius: 4px;" class="hljs cs has-numbering">string locstr = 123.ToString();//整数转字符串
- int ii = int.Parse(locstr);// 字符串转整数
- Class1 c11 = new Class1();
- Class2 c22 = c11 as Class2; //使用as进行显式转换
- int ifromd = (int)dnum; //double类型显式转换转为int类型</code>
3.C# 封装
封装使用 访问修饰符 来实现
public 公有访问。不受任何限制。
private 私有访问。只限于本类成员访问,子类、实例都不能访问。
protected 保护访问。只限于本类和子类访问,实例不能访问。
internal 内部访问。只能在当前项目的内部访问,出了这个项目就访问不到了!
protected internal 内部保护访问。就是protected和internal的结合 当前项目的当前类和子类才能访问
C#成员类型的可修饰及默认修饰符如下表:
成员类型 默认修饰符 可被修饰符
enum | public | none |
class | private | public、protected、private、internal、protected internal |
interface | public | none |
struct | private | public、private、internal |
Private 访问修饰符
只有同一个类中的函数可以访问它的私有成员。即使是类的实例也不能访问它的私有成员。
Protected 访问修饰符
Protected 访问修饰符允许子类访问它的基类的成员变量和成员函数。这样有助于实现继承。
4.C# 方法
按值传递参数
这是参数传递的默认方式。在这种方式下,当调用一个方法时,会为每个值参数创建一个新的存储位置。
按引用传递参数(ref用于声明引用参数)
引用参数是一个对变量的内存位置的引用,使用 ref 关键字声明引用参数。
当按引用传递参数时,与值参数不同的是,它不会为这些参数创建一个新的存储位置。
- <code style="display: block; padding: 0px; font-family: Consolas, Inconsolata, Courier, monospace; font-size: 14px; line-height: 22px; border-radius: 4px;" class="hljs cs has-numbering">void Start () {
- int a = 100;int b = 200;
- print(a +"\n"+ b);
- Swap(ref a, ref b);
- print(a +"\n"+ b);
- }
- public void Swap(ref int x,ref int y)
- {
- int temp;
- temp = x;x = y;y = temp;
- }</code>
按输出传递参数(输出参数out a)
1. return 只返回一个值, 使用 输出参数 来从函数中返回两个值。
2. 主方法中不需要赋值,当需要从一个参数没有指定初始值的方法中返回值时,输出参数out特别有用。
- <code style="display: block; padding: 0px; font-family: Consolas, Inconsolata, Courier, monospace; font-size: 14px; line-height: 22px; border-radius: 4px;" class="hljs cs has-numbering"> void Start ()
- {
- int a, b;
- ValueTrue(out a, out b);
- Debug.Log(a + "\n" + b);
- }
- private void ValueTrue(out int x,out int y)
- {
- x = 100;y = 200;
- }</code>
也就是,out形参类似于ref形参,但它只能用来将值从方法中传出。在调用之前,并不需要为out形参的变量赋予初始值。在方法中,out形参总是被认为是未赋值的,但在方法结束前必须赋于形参一个值。因此,当调用方法后,out形参引用的变量会包含一个值。
5.C# 数组(Array)
foreach 语句用于循环访问集合以获取所需信息,但不应用于更改集合内容以避免产生不可预知的副作用。
所以,foreach()方法中不能对变量进行赋值,但可以读数组里面的元素来用
6.C# 字符串(String)
- <code style="display: block; padding: 0px; font-family: Consolas, Inconsolata, Courier, monospace; font-size: 14px; line-height: 22px; border-radius: 4px;" class="hljs mel has-numbering"> string [] ab = { "s", "b" };
- string cd = string.Join(" ", ab);
- print(cd);//输出 s b</code>
7.C# 结构(Struct)
结构可定义非默认型构造函数,构造函数和析构函数相反,析构函数专做善后工作
补:C#接口好比一种模版,这种模版定义了对象必须实现的方法
结构是值类型数据结构。它使得一个单一变量可以存储各种数据类型的相关数据。struct 关键字用于创建结构。
- <code style="display: block; padding: 0px; font-family: Consolas, Inconsolata, Courier, monospace; font-size: 14px; line-height: 22px; border-radius: 4px;" class="hljs cs has-numbering">struct Books
- {
- public string title;
- …
- }; //C#中struct后面的分号可加可不加,而C++中struct后面的分号必须加。
- Books Book1;
- Book1.title = "C Programming";</code>
8.C# 枚举(Enum)
用enum做Unity中的下拉列表:
- <code style="display: block; padding: 0px; font-family: Consolas, Inconsolata, Courier, monospace; font-size: 14px; line-height: 22px; border-radius: 4px;" class="hljs cs has-numbering"> public RotateWays a=RotateWays.rightRotate;
- public enum RotateWays
- {
- leftRotate,
- rightRotate,
- RLBothRotate
- };</code>
9.C# 类(Class)
定义了一个类就是定义了一个数据类型
析构函数用于在结束程序(比如关闭文件、释放内存等)之前释放资源。析构函数不能继承或重载。用法:~Line() //析构函数
构造函数分为两种
C# 类的静态成员
直接调用类而不需要创建类的实例来获取。静态变量可在成员函数或类的定义外部进行初始化。您也可以在类的定义内部初始化静态变量
您也可以把一个成员函数声明为 static。这样的函数只能访问静态变量。静态函数在对象被创建之前就已经存在。
- <code style="display: block; padding: 0px; font-family: Consolas, Inconsolata, Courier, monospace; font-size: 14px; line-height: 22px; border-radius: 4px;" class="hljs cs has-numbering"> public static int num;
- public static int getNum()
- {
- return num;
- }</code>
10.C# 继承
利于重用代码和节省开发时间,利于维护
一个类可以派生自多个类或接口,这意味着它可以从多个基类或接口继承数据和函数。
最多只能继承一个基类或一个接口,也可以同时继承上面两个
接口:
- <code style="display: block; padding: 0px; font-family: Consolas, Inconsolata, Courier, monospace; font-size: 14px; line-height: 22px; border-radius: 4px;" class="hljs cs has-numbering"> public interface PaintCost
- {
- int getCost(int area);
- }</code>
基类:
- <code style="display: block; padding: 0px; font-family: Consolas, Inconsolata, Courier, monospace; font-size: 14px; line-height: 22px; border-radius: 4px;" class="hljs cs has-numbering"> class Shape
- {
- public void setWidth(int w)
- {
- width = w;
- }
- public void setHeight(int h)
- {
- height = h;
- }
- protected int width;
- protected int height;
- }</code>
子类:
- <code style="display: block; padding: 0px; font-family: Consolas, Inconsolata, Courier, monospace; font-size: 14px; line-height: 22px; border-radius: 4px;" class="hljs cs has-numbering"> class Rectangle : Shape, PaintCost
- {
- public int getArea()
- {
- return (width * height);
- }
- public int getCost(int area)
- {
- return area * 70;
- }
- }</code>
主动类:
实例化后,赋值给接口的变量,调用即可
- <code style="display: block; padding: 0px; font-family: Consolas, Inconsolata, Courier, monospace; font-size: 14px; line-height: 22px; border-radius: 4px;" class="hljs avrasm has-numbering"> Rect.setWidth(5);
- Rect.setHeight(7);
- area = Rect.getArea();
- Console.WriteLine("油漆总成本: ${0}" , Rect.getCost(area));</code>
11.C# 多态性
静态多态性
• 函数重载(相同的函数不同功能)
• 运算符重载(重定义或重载 C# 中内置的运算符)
动态多态性
动态多态性是通过 抽象类(使用关键字abstract 声明) 和 虚方法(使用关键字 virtual 声明) 实现的
12.C# 接口(Interface)
接口提供了派生类应遵循的标准结构,接口中只用写方法类型和方法名
13.C# 命名空间(Namespace)
1.命名空间的设计目的是提供一种让一组名称与其他名称分隔开的方式。即在一个命名空间中声明的类的名称与另一个命名空间中声明的相同的类的名称不冲突。
2.using XXX的作用
- <code style="display: block; padding: 0px; font-family: Consolas, Inconsolata, Courier, monospace; font-size: 14px; line-height: 22px; border-radius: 4px;" class="hljs avrasm has-numbering">using UnityEngine.UI;可以不写,如果这样的话:
- UnityEngine.UI.Text text2;
- void Start ()
- {
- text2.text = "00";
- }</code>
3.自定义命名空间,命名空间里装的是 类:
- <code style="display: block; padding: 0px; font-family: Consolas, Inconsolata, Courier, monospace; font-size: 14px; line-height: 22px; border-radius: 4px;" class="hljs vala has-numbering">namespace first_space
- {
- class namespace_cl
- {
- public void func()
- {
- Console.WriteLine("Inside first_space");
- }
- }
- }</code>
14.C# 正则表达式
用于匹配输入文本
15.C# 异常处理(同Java,了解)
16.C# 文件的输入与输出
二、高级
1.C# 属性
有get;set访问器:获取属性时,会执行get模块。给属性赋值时,会执行set模块。
若没有写set,也就是说外界是不能修改的。
访问器(accessor)声明可包含一个 get 访问器、一个 set 访问器,或者同时包含二者。
用法:
- <code style="display: block; padding: 0px; font-family: Consolas, Inconsolata, Courier, monospace; font-size: 14px; line-height: 22px; border-radius: 4px;" class="hljs cs has-numbering"> // 声明类型为 string 的 Code 属性
- public string Code
- {
- get
- {
- return code;
- }
- set
- {
- code = value;
- }
- }</code>
在一个方法里直接用就好:
比如:
- <code style="display: block; padding: 0px; font-family: Consolas, Inconsolata, Courier, monospace; font-size: 14px; line-height: 22px; border-radius: 4px;" class="hljs cs has-numbering">return "Code = " + Code;//调用get()
- s.Code = "001";//实例化后,调用set()</code>
2.C# 索引器
让对象以类似数组存取的方式来存取,也就是允许一个对象可以像数组一样被索引。当您为类定义一个索引器时,该类的行为就会像一个 虚拟数组(virtual array) 一样。您可以使用数组访问运算符([ ])来访问该类的实例。
和属性的区别:
属性返回或设置一个特定的数据成员,而索引器返回或设置对象实例的一个特定值。换句话说,它把实例数据分为更小的部分,并索引每个部分,获取或设置每个部分。
定义一个属性(property)时包括提供属性名称(public string Code)。索引器定义的时候不带有名称(public string this[int index]),但带有 this 关键字,它指向对象实例。索引器类似于属性,不同之处在于它们的取值函数采用参数。例子:
public class Person
{
private string _name = “No one”;
public Person(string name)
{
_name = name;
}
//未完
};
在上面Person类里添加一个索引器:
- <code style="display: block; padding: 0px; font-family: Consolas, Inconsolata, Courier, monospace; font-size: 14px; line-height: 22px; border-radius: 4px;" class="hljs cs has-numbering">public string this[string key]
- {
- get { if (key == "Name")
- return _name;
- return null;}
- set { if (key == "Name")
- _name = value;
- return;}
- } </code>
跟属性一样,索引器可以只有set访问器或者get访问器,或者二者都有,不过,索引器可输入参数。
用法:
- <code style="display: block; padding: 0px; font-family: Consolas, Inconsolata, Courier, monospace; font-size: 14px; line-height: 22px; border-radius: 4px;" class="hljs avrasm has-numbering">Person p = new Person ("Arya");
- p ["Name"] = "Anonymous";
- System.Console.WriteLine (p ["Name"]); </code>
3.C# 委托
委托是用于引用与其具有相同标签的方法
一个对象被一个委托实例化去执行某个方法
C# 中的委托(Delegate)类似于 C 或 C++ 中函数的指针。委托(Delegate) 是存有对某个方法的引用的一种引用类型变量。引用可在运行时被改变。
委托(Delegate)特别用于实现事件和回调方法。换句话说,可以使用委托对象调用可由委托引用的方法。
4.C# 不安全代码
当一个代码块使用 unsafe 修饰符标记时,C# 允许在函数中使用指针变量。不安全代码或非托管代码是指使用了指针变量的代码块。
5.C# 多线程
线程 被定义为程序的执行路径。
如果您的应用程序涉及到复杂的和耗时的操作,那么设置不同的线程执行路径往往是有益的,每个线程执行特定的工作。
本文转载自: https://blog.csdn.net/BillCYJ/article/details/79394925
相关推荐
C# 的数据类型分为:值类型和引用类型 值类型: 变量:从用户角度,变量是存储信息的基本单元。从系统角度,变量是计算机内存中的一个存储空间。 C#值类型分为: 简单类型(Simply types) 结构类型(Struct types)...
C#目前业内主流语言版本,本资源为C#案例教程,从最最初级开始教学,主攻刚入手C#的初学者,对编程怀有一定兴趣的,网上太多的案例都只有简单的注释,没有一个明确的分级以及拓展,本教程从零开始,每一步都有详细的...
本教程集合了我工作和学习过程中积累的C#各种知识点,旨在帮助你深入理解和掌握C#的基础及高级特性。 1. **C#基础知识** - **变量与数据类型**:包括基本的数据类型(如int, string, bool等)以及引用类型。理解...
C#目前业内主流语言版本,本资源为C#案例教程,从最最初级开始教学,主攻刚入手C#的初学者,对编程怀有一定兴趣的,网上太多的案例都只有简单的注释,没有一个明确的分级以及拓展,本教程从零开始,每一步都有详细的...
C#目前业内主流语言版本,本资源为C#案例教程,从最最初级开始教学,主攻刚入手C#的初学者,对编程怀有一定兴趣的,网上太多的案例都只有简单的注释,没有一个明确的分级以及拓展,本教程从零开始,每一步都有详细的...
《c#6.0学习笔记》随书光盘及pdf和源代码,这三部分内容都在这一个资源里面,视频教程很难找,在网上找了很久很久,和大家分享一下。
《C# 6.0学习笔记:从第一行C#代码到第一个项目设计》是由周家安编著的一本深入浅出的C#编程教程。这本书主要针对C#初学者和有一定基础的开发者,旨在帮助读者全面理解C# 6.0版本的新特性和编程技巧,并通过实际项目...
《Learning Hard C# 学习笔记》是一份深入浅出的C#编程教程,旨在帮助初学者快速掌握C#这门强大的编程语言。C#是由微软公司开发的一种面向对象的编程语言,广泛应用于Windows平台、游戏开发(尤其是Unity引擎)、...
屏幕截图的添加可能意味着笔记中包含了实际操作的步骤和可视化教程,这对于初学者来说是非常有用的补充。 首先,让我们探讨C#的基础知识。C#由微软公司开发,是.NET框架的一部分,它支持多种编程范式,包括面向对象...
(这个也是最新爬的手册 但是有一点点错误 查资料还是没有什么关系的 点几个错误确定就行 我自用的) 前端开发和全栈开发无聊的时候可以放在笔记本上点点 也可以当工具书收藏 嗯
《C#使用手册+C#学习笔记+C#基础教程》是一份综合性的学习资源,适合对C#编程感兴趣的初学者和进阶者。这份压缩包包含了三个核心文档:《C#基础教程-c_实例教程.doc》、《C#使用手册.doc》和《C#学习笔记.doc》,...
C#学习阅读笔记 本笔记总结了 C# 语言的基本概念、特点和重要知识点。C# 是一种类型安全的语言,专门用于 .NET Framework,具有强数据类型和面向对象的编程特点。下面是笔记的主要内容: 一、C# 语言概述 * C# 是...
LearningHard C#学习笔记,学习C#的经典入门教材。 非常适合初学者,希望大家一起努力。
c#图解教程第5版pdf
在C#编程语言中,`Console.WriteLine()`是一个基础的输出函数,用于在控制台打印指定的内容。例如,`Console.WriteLine("你想显示的内容。...通过苏坤的C#入门基础视频教程,学习者可以逐步建立对C#编程的扎实基础。
作为C#的菜鸟基础教程,这个资源显然是为了帮助初学者快速掌握这门语言的入门知识。 本教程的核心目标是引导零基础的学习者了解C#的基本概念,包括语法、变量、数据类型、控制结构、函数、类与对象等。以下是一些...
在深入探讨"C#高级编程"的学习笔记之前,我们先来理解一下C#这门语言的基础。C#(读作"C sharp")是由微软公司开发的一种面向对象的编程语言,主要用于构建Windows应用程序、Web应用以及移动应用。它在.NET框架或...
C#是一种由微软开发的面向对象...总的来说,C#教程涵盖的内容广泛,从基础语法到高级特性,再到实际应用场景,都有深入讲解。通过系统学习,你可以成为一名熟练的C#开发者,能够解决各种编程问题,创建高效的应用程序。
菜鸟教程的C#教程在介绍C#编程基础的同时,还讲解了如何通过在线工具进行实际编程操作,为读者提供了一个快速学习和实践C#编程的平台。通过阅读本教程并进行实践,初学者能够较快地掌握C#编程的基本概念,并逐步提升...