C#学习知识点记录

一前言

想要学习一门上位机GUI编程语音,用作设备调试,经过比对后,最终选择C#.这里做一些记录

二知识点

1.C#是.net框架的一部分。

.net框架是巨大的代码库,包含很多组件,比如windows forms, windows presentation foundation

2.C# 大小写敏感,源文件后缀.cs

3.程序的执行从main方法开始

4.C#中数据类型可以分为值类型,引用类型,指针类型三大类

值类型 char, int之类

byte 表示8位无符号整数

引用类型 不包含存在变量中的实际数据,包含对变量的引用

内置的引用类型有

object, ---可以分配任何其他类型的值,但是分配前要先类型转换,一个值类型转换为对象类型称装箱,对象类型转为值类型称为拆箱 ----类型检查编译时

dynamic, ---可以存储任何类型的值在动态类型变量中, dynamic d = 20; ----类型检查运行时

string --- String str = "runoob.com"; string str = @"C:\Windows"; ---@可以把\当作普通字符--字符串可以任意换行

用户自定义引用类型有:class、interface 或 delegate

指针类型 和C没啥区别

5.C#提供了一些类型转换方法,例如使用 Convert 类、Parse 方法和 TryParse 方法,这些方法可以帮助处理不同的数据类型之间的转换。

Convert类-提供了一组静态方法,可以在各种基本数据类型之间进行转换

string str = "123";

int num = Convert.ToInt32(str);

Parse 方法用于将字符串转换为对应的数值类型,如果转换失败会抛出异常

TryParse 方法类似于 Parse,但它不会抛出异常,而是返回一个布尔值指示转换是否成功。

6.Console.WriteLine("a = {2},b = {1},c = {0}", a, b, c);

----C#打印格式要依靠大括号占位符,不像C语言从前到后一一对应

7.入口函数 static void Main(string\[\] args)----static, 大写的Main不能错

8.作用域

局部变量:方法中定义的---方法里面可见

全局变量:类中定义或命名空间中定义,则类中或命名空间中可见

循环变量作用域:

for (int i = 0; i < 5; i++)

{

// i 在循环体内可见

}

// i 在这里不可见-----这块和C语言是一样的,for里面定义i只能循环体内使用

9.面向对象关键字public--访问修饰符之一,用于声明类、方法、变量等成员的访问权限

修饰类----修饰的类可以备其他任何类访问

修饰方法--修饰的方法可以在类的内部和外部被调用--没有指定显示访问修饰符,,默认访问权限是private

修饰变量--该变量可以在类的内部和外部被访问和修改

访问修饰符

public :所有对象都可以访问

internal:同一个程序集内的对象可以访问

protected: 只有该类对象和子类对象可以访问

private:只有该对象内部可以访问----使用该修饰符,类的实例也不能访问它的私有成员

9.1 构造函数---特殊的方法,用于创建对象时初始化对象的成员,特点如下

命令---名称必须与类名相同

无返回值--没有返回类型,即使是void

调用时机--构造函数在创建对象时自动调用,通过构造函数,可以强制要求调用者在创建对象时提供必要的参数

重载-----一个类可以有多个构造函数(通过参数列表区分),称为构造函数重载---创建对象时可以根据构造函数创建不同功能的对象

注:类会默认提供一个无参构造函数,但是如果定义了有参构造函数,那么就不会自动提供无参的了,除非你显式定义

10.运算符

is 判断对象是否为某一类型 if(FORD is Car)----检查Ford是否是Car类的一个对象

11.参数传递

值传参-----复制参数的实际值给形式参数,不改变实参的值

引用传参---引用参数是对一个变量的内存位置的引用,会改变实参的值,用ref声明

输出传参---用out声明输出参数,当需要从一个参数没有指定初始值的方法中返回值时,特别有用

12 nullable可空类型(?)

c#提供的特殊类型,可以表示在其基础类型正常范围内的值,再加上一个null值

eg:int? num = null;

int? num1 = 45;

double? num2 = new double?();

null合并运算符(??)

eg:C = A ?? B-----若A为null,则C = B,否则C = A;

13 数组

int\[\] a = new int10;---创建拥有10个元素的数组a;

int\[\] a = new int10 {0,1,2,3,4,5,6,7,8,9};---创建拥有10个元素的数组a,并赋初值;

int\[\] b = a;-----把数组a赋值给数组b,指向相同的内存位置

14 foreach循环和for循环区别---foreach(int data in a){}

foreach 无需索引就能遍历数组所有元素,只读---用于仅遍历不修改数组元素的场合

for循环 需要索引才能遍历数组所有袁旭,可读写---用于需要改写数组元素的场合

15 string

(1)string message = String.Join(" ", sarray);

这行代码使用 String.Join 方法将数组 sarray 中的所有字符串连接成一个单一的字符串,并用空格 " " 作为分隔符。

String.Join 是 C# 中的一个静态方法,用于将数组或集合中的字符串元素连接成一个新的字符串,并可以指定分隔符。

(2)string类属性

Chars 在当前String对象中获取Char对象的指定位置

Length 在当前的String对象中获取字符数

(3)string类方法----有很多,比如比较,转换大小写等

using System; ----using引入命名空间

using System.Text;有啥差别

---C#中引入父级命名空间,并不会自动导入子命名空间

17.结构体使用起来和C没啥差别

struct Child

{

public string name;

public int age;

public string country;

复制代码
}
结构体可以定义构造函数,但是不能定义无参构造函数,无参构造函数默认是自动定义得,且不能改变;
      不能继承其他得结构和类
	  结构体赋值是复制整个结构,而类复制是复制的引用

18.枚举

enum len

{

width,

height,

}---差别C语言使用可以直接使用成员,但是C#则要类似于结构体的形式,len.width

19.类

类的默认访问标识符是internal,成员的默认访问标识符是private

析构函数

隐式调用

~类名()----无返回值,也没有参数,程序结束之前释放资源

20 类的静态成员

类中的变量即属性,如果被定义为静态的,那么无论创建多少个类的实例,都只有一个该静态成员的副本,类似于全局变量

类中的方法如果声明为static,那么这个方法只能访问静态变量,静态方法再对象被创建之前就存在

21 类的继承:基类(父类)和派生类(子类)

一个类可以继承自另一个类,C#不支持多重继承,但支持接口的多重继承

class BaseClass

{

public void meth()

{}

}

class child : BaseClass-------子类可以继承父类的成员,除非父类中明确标记为私有private

{

public void OtherMeth()

{

base.meth ----可通过base关键字访问父类中的方法

}

}

22 类的多态

静态多态

函数重载:多个方法,名称相同,参数个数或类型不同

运算符重载

动态多态

abstract抽象类

特点:

(1)不能实例化,只能被继承

(2)可以部分方法实现,部分像接口一样不实现,交给子类去实现

(3)不实现的方法只能声明为抽象方法,抽象方法只能在抽象类里面声明

(4)可以在类前面放关键字sealed,声明为密封类,密封类不能被继承

virtual虚方法

特点:

(1)类中用关键字virtual声明

(2)可以在不同的继承类中有不同的实现

23 接口 类和接口都可以继承别的接口

interface Imyinterface ----关键字interface

{

void fun(); ------只是一个声明,没有实现

}

class Imple : Imyinterface

{

public void fun() ------类继承接口时,要实现接口中的方法

{

}

}

24 异常

C# 异常是使用类来表示的。C# 中的异常类主要是直接或间接地派生于 System.Exception 类。System.ApplicationException 和 System.SystemException 类

是派生于 System.Exception 类的异常类。

System.ApplicationException 类支持由应用程序生成的异常。所以程序员定义的异常都应派生自该类。

System.SystemException 类是所有预定义的系统异常的基类。

关键字 try catch finally throw

复制代码
try
{
   //执行语句
}
catch(exception A)
{
   //当捕获异常A时,执行相应的异常处理
}
finally
{
  //无论是否出现异常,都会执行的语句
}

25 文件输入与输出

一个文件时存储在磁盘中指定名称和目录路径的集合,当打开文件进行读写时,变成一个流

从根本上说,流时通过通信路径传递的字节序列,有两个主要的流:输入流(读)和输出流(写)

System.IO命名空间有各种不同的类,可以执行各种文件操作,如创建删除文件,读写文件,关闭文件等

-----这个可能要后面实际使用过程中慢慢掌握

26 Thread多线程

线程生命周期

开始于System.Threading.Thread 类的对象被创建时,结束于线程被终止或完成执行时;

进程中第一个被执行的线程称为主线程

Thread类有很多方法和属性,同样这也不是你看一下就能掌握的,后续边用边学

相关推荐
Scott9999HH6 小时前
【IIoT流量实战】蒸汽管道阀门全关却仍有流量?用 Python 实现涡街信号 FFT 频谱分析与温压全补偿积算网关,深度拆解靠谱的涡街流量计厂家硬核技术标准
开发语言·python
EIP低代码平台6 小时前
EIP 低代码平台 - 角色维护
低代码·c#·权限·工作流·netcore
码智社7 小时前
AES加密原理详解及Java实现加解密实战
java·开发语言
AI云海7 小时前
python 列表、元组、集合和字典
开发语言·python
萧瑟余晖8 小时前
JDK 26 新特性详解
java·开发语言
马优晨9 小时前
Freemarker 完整讲解(后端 Java 模板引擎)
java·开发语言·freemarker·freemarker 完整讲解·freemarker模板引擎
a11177610 小时前
2FA 验证码生成器(github登录验证 app)
笔记·学习
我的xiaodoujiao10 小时前
API 接口自动化测试详细图文教程学习系列32--Allure测试报告2
python·学习·测试工具·pytest
人邮异步社区10 小时前
怎么把C语言学到精通?
c语言·开发语言
心平气和量大福大11 小时前
C#-WPF-控件-TextBox 数据绑定
开发语言·c#·wpf