C#从零开始学习(图文教程),持续更新中~

马肤
这是懒羊羊

理论知识固然重要,但是只读理论往往是枯燥的,只有通过不断的实践和探索,才能更高效的进行学习。

目录

一、开发环境准备

1.下载Visual Studio 

二、从Hello World开始学习C#

1.控制台程序输出Hello World

2.Windows窗口应用输出Hello World(WinForms)

 3.WPF应用程序输出Hello World

三、初步认识类和命名空间

1.类的三大成员(初学可以在实例中慢慢摸索,没必要一开始就花太多时间去深究理论)

2.类与命名空间的使用(创建一个.Net Framework控制台应用 )

3.命名空间中的类冲突

4.类库的引用

官方类库引用(Console应用程序)

NuGet包引用 

DDL引用(黑盒,无源码)

 项目引用(白盒,有源码)

四、C#语言基本元素

1.关键字(keyword)

2.运算符(Operator)

3.标识符(Identifier)

4.标点符号

5.数据类型

6.注释

7.var定义类型

 8.变量(成员变量)

9.修饰符

10.方法(成员函数)

五、 C#基础方法知识

1.方法的由来

用C语言创建一个函数:

用C#创建方法:

​编辑

2.方法的复用

3.方法的重载

4.构造器(构造函数)

5.操作符(运算符)


一、开发环境准备

1.下载Visual Studio 

下载 Visual Studio Tools - 免费安装 Windows、Mac、Linux (microsoft.com)C#从零开始学习(图文教程),持续更新中~,icon-default.png?t=N7T8,词库加载错误:未能找到文件“C:\Users\Administrator\Desktop\火车头9.8破解版\Configuration\Dict_Stopwords.txt”。,操作,没有,进入,第1张https://visualstudio.microsoft.com/zh-hans/downloads/

 社区版对于个人使用免费,用于学习以及个人项目开发够用了

当然有心人花点心思也可以白嫖专业版


二、从Hello World开始学习C#

1.控制台程序输出Hello World

选择新建一个项目

按需求分类后选择对应开发环境 

开始写代码

  代码如下:

using System;
namespace SayHello {
    class SayHello {
        static void Main(String[] args) {
            Console.WriteLine("Hello World");
            Console.ReadKey();
        }
    }
}
using System ;

引用System命名空间(简化代码、提高开发效率)

未引入前

System.Console.WriteLine()

引入后

Console.WriteLine();
namespace SayHello {}

 定义一个命名空间(SayHello)

Class SayHello {}

定义一个名为SayHello的类

static void Main(String[] args){}

 程序的主入口,在C#中通常只存在一个Main方法,并非只能存在一个Main方法

 特别注意,在C#中Main方法第一个字母需要大写,Main != main 。

 在C#中Main方法必须用static修饰,即为静态方法,没有创建任何对象的情况下就可以执行

Console.WriteLine();
Console.ReadKey();

 在控制台输出一行文本

 按下任意键后继续

 

单击F5进行调试运行

Ctrl + F5进行不调试运行 

2.Windows窗口应用输出Hello World(WinForms)

创建Windows窗口应用

 点击后等待

 实现代码:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace WinFormsApp1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        private void Form1_Load(object sender, EventArgs e)
        {
        }
        private void button1_Click(object sender, EventArgs e)
        {
            textShowHello.Text = "Hello World" ;
        }
    }
}

实现效果:

实现原理:

textShowHello.Text = "Hello World" ;

 在行为事件面板双击鼠标点击事件,通过代码实现点击事件

 textShowHello:在属性面板自己设置的文本框控件名

 Text:用于设置或获取文本框内的值(在此事件中为设置值Hello World)

 3.WPF应用程序输出Hello World

创建WPF应用程序

 注意:WPF也被看做WinForms的升级版

记得给控件取名字 (养成良好习惯)

 为Button控件添加事件

点击闪电图标进入事件栏 ,双击Click创建点击事件

在方法中写代码实现点击事件

实现代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
namespace WpfApp2
{
    /// 
    /// Interaction logic for MainWindow.xaml
    /// 
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }
        private void buttonSayHello_Click(object sender, RoutedEventArgs e)
        {
            textShowHello.Text = "Hello World";
        }
    }
}

实现效果:

单击按钮输出Hello World 


三、初步认识类和命名空间

类(Class):构成程序的主体,是现实世界事物的模型

命名空间(namespace):以树型结构组织类(和其他类型)

类与对象的关系:对象(实例),就是类的实例化,类是一个概念,而对象就是存在概念中的个体,比如动物是一个概念也就是一个类,而狗就是一个对象,猫也是一个对象,你可以说狗和猫是动物,但是你不能说动物一定就是狗和猫。

1.类的三大成员(初学可以在实例中慢慢摸索,没必要一开始就花太多时间去深究理论)

属性(Property):属性用于封装对象的状态。

方法(Method):方法用于封装对象的行为和功能。

事件(Event):事件用于实现观察者模式,实现对象间的松耦合通信。

2.类与命名空间的使用(创建一个.Net Framework控制台应用 )

在一个项目中,我们会创造很多的类,同时也会使用很多官方已经定义好的类,在VS中类被靓青色标识

引用命名空间可以减少代码量、提高开发效率 

例如:

引用System命名空间时:

using System ;
namespace HelloWorld {
    class Hello {
        static void Main(String[] args) {
            Console.WriteLine("图书馆里有什么?");
            Console.WriteLine("《红楼梦》");
            Console.WriteLine("《西游记》");
            Console.WriteLine("《水浒传》");
            Console.WriteLine("《三国演义》");
        }
    }
}

引用System命名空间

using System ;

输出语句

Console.WriteLine("图书馆里有什么?");

实现效果:

未引用System命名空间:

//using System ;
namespace HelloWorld  {
    class Hello {
        static void Main(string[] args) {
            System.Console.WriteLine("图书馆里有什么?");
            System.Console.WriteLine("红楼梦?");
            System.Console.WriteLine("西游记?");
            System.Console.WriteLine("水浒传?");
            System.Console.WriteLine("三国演义?");          
        }
    }
}

将引用注释

//using System ;

输出语句

System.Console.WriteLine("图书馆里有什么?");

如果没有使用using System引用System命名空间,那么在每次使用其中的类型或方法时,都需要使用完整的命名空间路径来指明其地址。

错误使用时:

将鼠标焦点放在红色波浪线上按Alt + Enter 或者点击带红叉的小灯泡

 查看错误信息,选择解决方案

3.命名空间中的类冲突

引用命名空间的意义在于简化开发避免类名冲突,不同的命名空间可能包含相同的类名,指定不明就会引起冲突

 如果同时引用命名空间System.Windows.Shapes与System.IO

 如果不使用的命名空间请不要引用,避免类冲突。

4.类库的引用

类库引用是使用命名空间的物理基础

引用可分为两类:DLL引用(黑盒,无源码)、项目引用(白盒,有源码)

官方类库引用(Console应用程序)

1.打开对象浏览器

2.选择所有组件,搜索需求类库

3.添加至当前项目,单击所需类库,点击添加

NuGet包引用 

1.右键依赖项,选择NuGet管理

2.搜索需求包并下载,左上方查看已安装以及更新操作

3.好处

别人整合好的类库,不需要自己去梳理关系,安装完毕后即可立即使用

DDL引用(黑盒,无源码)

1.右键依赖项,选择添加项目引用

2.点击浏览,在计算机中找到需要使用的类库

3.查看类库,点击视图,点击对象浏览器,在左边查看类库中有哪些命名空间以及引用类

4.注意事项

依赖性:DDL引用需要注意类库中的方法是否正确,如果引用的类库中存在错误的方法,则会导致整个项目无法运行

项目引用(白盒,有源码)

1.将自己创建的类库,或找到的开源类库在VS打开并导入项目

2.将类库导入当前项目

3.效果展示

类库代码

using System;
namespace Num
{
    public class NumClass
    {
        public static double Add(double a , double b) {
            return a + b;
        }
        public static double Sub(double a , double b) {
            return a - b;
        }
    }
}

项目引用

using System;
namespace OperatorsApp1{
    class Program { 
        static void Main(String[] args) {
           double Num1 = Num.NumClass.Add(2,4);
           double Num2 = Num.NumClass.Sub(5,6);
            Console.WriteLine(Num1);
            Console.WriteLine(Num2);
        }
    }
}

运行结果

4.白盒引用的好处

单击代码区左侧灰色区域创建断点(使用调试运行F5)

点击逐语句或按F11进行错误查询

跳转至断点处对应方法所在类库的位置,自行查错改正。


四、C#语言基本元素

1.关键字(keyword)

关键字是具有特殊含义和功能的固定标识符,例如定义类、方法、变量、控制流等

这里举例几种较为常见的关键字

class 用于定义类new 用于创建新的对象实例
void 表示一个方法不返回任何值int、string、double等表示基本数据类型
static 修饰符,用于指定对象是静态的即属于类而非对象public、private、protected 用于定义类成员的访问权限
this 表示当前对象的引用base 表示基类的引用
if、else、switch、case 条件语句和选择语句for、while、do-while 循环语句
return 返回值try、catch、finally 异常处理
interface 用于定义接口enum 用于定义枚举类型
delegate 用于定义委托类型event 用于定义事件
using 用于导入命名空间或释放资源namespace 用于定义命名空间
sealed、abstract 用于限定类的继承特性override 用于在派生类中重写基类成员

除了列举的这些关键字外,通过MSDN可以查询到所有的关键字,按照需求可以精确的了解对应关键字具体有什么作用。(想要做到精通C#,那就把C#字典给过几遍)

2.运算符(Operator)

运算符在开发中的运用极深,理解每一个运算符的含义和用法是非常有必要的

这里列举MSDN中所展示的运算符

主要运算符
x.y成员访问
f(x)方法和委托调用
a[x]数组索引器访问
x ++后递增
X - -后递减
new T(...)对象和委托创建
new T(...){...}具有初始化设定项的对象创建
new {...}匿名对象初始值设定项
new T[...]数组创建
typeof(T)获取T的 System.Type 对象
checked(x)在已检查的上下文计算表达式
unchecked(x)在未检查的上下文计算表达式
default(T)获取类型T的默认值
delegate{}匿名函数(匿名方法)
一元运算符
+ x标识
- X求反
! x逻辑求反
~ x按位求反
++ x前递增
-- x前递减
(T) x

将x显式转换为T

乘法运算符
*乘法
/除法
%取余
加法运算符
x + y相加、字符串串联、委托组合
x - y相减、委托移除
移位运算符
x > y右移
关系和类型运算符
x 小于
x > y大于
x >= y大于或等于
x y匿名函数(lambda表达式)

3.标识符(Identifier)

标识符是用来表示变量、类、方法、属性等各种程序实体的名称

注意事项:

1.标识符可以包括字母、数字、下划线(_)

2.标识符不能以数字开头

3.在关键字前使用@可以作为标识符

4.标识符的定义最好有含义

5.标识符区分大小写,例如Myname和MyName,这是两个标识符

6.驼峰命名法:大驼峰命名法,所有单词首字母大写。

小驼峰命名法,第一个单词首字母小写,后续单词首字母全部大写

7.标识符不能包含除下划线_以外的如何符号或空格

8.不能与C#类库名称重名

4.标点符号

标点符号不参与运算

常用的标点符号
分号;用于表示语句的结束,每条语句必须用分号结束
大括号{}用于标识代码块的开始和结束,大括号里面的代码被视为独立的代码块
小括号()用于包裹方法、属性、条件语句等的参数和表达式
方括号[]用于定义数组或访问数组中的元素
尖括号用于表示泛型类型的参数或表示类型约束
逗号,用于分隔多个参数、数组元素以及在声明语句中初始化变量时分隔不同的值
冒号:用于表示继承、实现接口、标签标识以及在switch语句中定义case
点号.用于访问对象的成员,如方法、属性、字段等
引号 双引号 ' ' " "用于表示字符字面量和字符串字面量
反引号`用于表示字符串字面量或定义verbatim字符串

5.数据类型

数据类型用于声明变量的类型,指定存储数据的方式以及可执行的操作

整型
sbyte-128 至 127有符号8位整数
byte0 至 255无符号8位整数
charU+0000 至 U+ffff16位Unicode字符
short-32768 至32767有符号16位整数
ushort0 至 65535无符号16位整数
int-2147483648 至 2147483647有符号32位整数
uint0 至 4294967295无符号32位整数
long-9223372036854775808 至 9223372036854775807有符号64位整数
ulong0 至 18446744073709551615无符号64位整数
浮点型
float+-1.5e-45 至 +-3.4e387位
double+-5.0e-324 至 +-1.7e30815 至 16位
逻辑值类型
bool只有两个值,True为真,False为假
字符与字符串类型
char引号中只能有一个字符如‘a’、‘2’、‘g’
String可包含零个或多个字符的序列,最大长度约为15亿个字符(在.NET Framework中)

 这里只介绍一部分数据类型,详细的资料按需要查询MSDN

6.注释

注释是程序员开发过程中对开发进度以及代码功能的解释

做项目不写注释容易被刺杀。养成好习惯,代码跑到哪注释写到哪

注释分为单行注释和多行注释(块注释)

正常输出

输出结果

1
2
3
4
5
6
7
8
9

单行注释

使用:在需要注释的代码前输入  //  即可注释一行代码

输出结果

1
3
5
7
9

多行注释(块注释) 

使用:在需要注释的代码块前输入  /*  在代码块结束后输入 */  即可注释一块代码(/**/)

输出结果

9

注释的快捷键:

1.点击工具,选择选项

 2.点击键盘,搜索注释,找到注释选中行以及取消注释选中行

3.设置快捷键

7.var定义类型

利用var定义的值会被C#自动编译为对应类型

实现代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace ConsoleApp2
{
     class Program
    {
        static void Main(string[] args)
        {
            var a = 58;
            Console.WriteLine(a.GetType().Name);
            Console.WriteLine(a.GetType().FullName);
            Console.WriteLine(a.GetType().Namespace);
            Console.WriteLine(a.GetType().Assembly);
            Console.ReadLine();
        }   
    }
 
}

实现效果: 

实现解析:

因为58是整数类型的值,所以GetType().Name方法返回的值为int32

GetType().Name  //获取对象的类型的名称
GetType().FullName  //获取对象的类型的完全限定名称,及命名空间和属性名称
GetType().Namespace  //获取对象的命名空间的名称
GetType().Assembly  //获取对象所在的程序集信息

 8.变量(成员变量)

变量是用于存储和操作数据的一种命名标识符

声明变量:

变量类型 变量名 ;

变脸类型 变量名 = 变量值 ;

需要注意的是当声明变量没指定值时,系统会给变量一个初始值

整数类型(int、long、short、byte等):初始值为0

浮点数类型(float、double):初始值为0.0

布尔类型(bool):初始值为false

字符类型(char):初始值为'/0'

引用类型(String、类、接口、委托等):初始值为null

9.修饰符

修饰符是用于改变类、成员、方法、属性等的行为和访问级别的关键字

访问修饰符:

public 

10.方法(成员函数)

将逻辑代码封装起来,能够反复调用,用来执行特定任务

访问修饰符 数据类型 方法名(参数){
    功能代码 ;
    return 返回值 ;
}

实例一:加法运算(有参数,有返回值)

实例二:日期打印(无参数,有返回值)

实例三:语句输出(无参数,无返回值)


五、 C#基础方法知识

1.方法的由来

  • 方法(method)的起源需要追溯到早期的编程语言,如高级语言C/C++中的函数(function)即为方法的前身。    
  • 方法是面向对象范畴的概念,在非面向对象语言中仍然称为函数。

    举个例子:

    (1).用C语言创建一个函数:

    1.创建C++空项目

    2. 在右侧源文件中创建项目

     将默认的后缀cpp(C++后缀)改为c(C语言后缀)代码实现

    #include 
    double Add(double a,double b)
    {
    	return a + b ;
    }
    int main()
    {
    	double q = 14 ;
    	double w = 16 ;
    	double result = Add(q,w);
    	printf("%f+%f=%f",q, w, result);
    	return 0 ;
    }

    #include  

    C语言的预处理指令,它告诉编译器在编译之前包含标准输入输出头文件(Standard Input Output header file)。

    这个头文件包含了多种标准输入输出函数的声明,例如printf()和scanf()。当你使用这些函数时,你需要在源代码文件中包含这个头文件,以便编译器知道这些函数的声明和定义。

     double Add(double a,double b)

    {

        return a + b ;

    }

    定义一个名字为Add的函数,它接受double类型的参数a和b,并返回a + b的和

     int main()

    {

        double q = 14 ;

        double w = 16 ;

        double result = Add(q,w);

        printf("%f+%f=%f",q, w, result);

        return 0 ;

    }

    定义一个main函数来展示函数应用,定义两个double类型的变量q和w。

    调用Add函数,将q和w作为参数传递,并将结果存储在result中

    printf()函数用于格式化输出内容,%f代表浮点数,将q、w、result作为参数替换,得到14.000000 + 16.000000 = 30.000000 。

    实现结果:

    (2).用C#创建方法:

    实现结果:

     代码实现:

    using System;
    namespace CMethod {
        class Program {
            static void Main(string[] args)
            {
                Calculator calculator = new Calculator();
                Console.WriteLine(calculator.GetCircleArea(10));
                Console.WriteLine(calculator.GetCylinderVolume(10,10));
                Console.WriteLine(calculator.GetConeVolume(10,10));
            }
        }
        class Calculator {
            public double GetCircleArea(double r) {
                return 3.14 * r * r;
            }
            public double GetCylinderVolume(double r,double h) {
                return 3.14 * r * r * h;
            }
            public double GetConeVolume(double r, double h) { 
                return 3.14 * r * r * h / 3;
            }
        }
    }

    1.在测试项中,我们创建了一个Calculator类

    2.而在Calculator类中,我们又定义了GetCircleArea、GetCylinderVolume、GetconeVolume三个方法

    3.在Program类的main方法中将Calculator类中定义的三个方法分别调用并输出

    C#中的函数不能独立于类(或结构体)之外

    2.方法的复用

    using System;
    namespace CMethod {
        class Program {
            static void Main(string[] args)
            {
                Calculator calculator = new Calculator();
                Console.WriteLine(calculator.GetCircleArea(10));
                Console.WriteLine(calculator.GetCylinderVolume(10,10));
                Console.WriteLine(calculator.GetConeVolume(10,10));
            }
        }
        class Calculator {
            public double GetCircleArea(double r) {
                return Math.PI * r * r ;
            }
            public double GetCylinderVolume(double r,double h) {
                return GetCircleArea(r) * h ;
            }
            public double GetConeVolume(double r, double h) { 
                return GetCylinderVolume(r,h) / 3 ;
            }
        }
    }

    不使用复用的坏处:

    1. 在之前的方法定义中PI以3.14代替并不符合大多数的计算要求,如果出现需要修改PI的定义值,那么在定义的三个方法中都需要修改,以此类推会消耗极大的时间与精力

    2.在反复的参数修改中极易出现数值的偏差,导致最终计算结果的偏差错误

    3.如果出现错误很有可能牵扯整个流程,代码拖沓又复杂,难维护且浪费资源

    使用复用的好处:

    1.通过已经定义好的方法,减少无用代码的累积,提高开发效率

    2.修改的地方从很多处变成改一处,大大减少了代码出错的可能性,且在维护方面也提升了一大截

    3.总而言之,使用方法的复用可以提高代码的内聚性,实现良性循环

    3.方法的重载

    方法重载在C#与Java中的运用相当广泛,便于扩展且便于理解。

    方法签名(Method signature),包括方法名称和参数列表(参数类型、顺序)。在C#中,方法签名是区分同名但参数不同的方法的重要因素。

    方法运用:

    实现代码:

    using System;
    namespace CMethod {
        class Program {
            static void Main(string[] args)
            {
                //相同的方法名,传入不同的参数,实现不同的效果
                Method m = new Method();       
                Console.WriteLine(m.Add(500,20));
                Console.WriteLine(m.Add(1000,300,14));
                Console.WriteLine(m.Add("我是Add方法!"));
            }
            class Method {
                //定义一个名称为Add,参数类型为int,int的方法
                public int Add(int a, int b) { 
                    return a + b ;
                }
                //定义一个名称为Add,参数类型为int,int,int的方法
                public int Add(int a, int b,int c)
                {
                    return a + b + c ;
                }
                //定义一个名称为Add,参数类型为String的方法
                public String Add(String a) {
                    return a;    
                }
            }
        }
    }

    常见错误:

     

    参数类型相同

     与返回类型无关

    与参数顺序无关

    4.构造器(构造函数)

    构造器分为两种,一种是有参构造一种是无参构造。在调用一个类时,如果你没有去声明构造,那么系统将默认使用无参构造。

    默认使用的构造:

    创建有参、无参构造各一个

    代码如下:

    using System;
    namespace CMethod {
        class Program {
            static void Main(string[] args)
            {
                //给有参构造赋值
                Student student = new Student(2,"ZhangSan");
                Console.WriteLine(student.ID);
                Console.WriteLine(student.Name);
                Console.WriteLine("-----------------------------------");
                Student student1 = new Student();
                Console.WriteLine(student1.ID);
                Console.WriteLine(student1.Name);
            }
        }
        class Student{
            public int ID;
            public string Name;
            //无参构造
            public Student() { 
                this.ID = 1;
                this.Name = "Test";
            }
            //有参构造
            public Student(int ID,String Name) { 
                this.ID = ID;
                this.Name = Name;
            }
        }
    }

    在这个程序的Student类中我们创建了两个构造函数,利用有参构造输出我们想实现的数值,利用无参构造输出默认值

    5.操作符(运算符)

    在笔记的第四章我们简单引用了MSDN中对于运算符的定义以及运算符的使用,接下来我将再次列出C#中常用的运算符及其描述

    操作符(Operator)、操作数(Operand)

    类别运算符使用介绍
    赋值运算符=

    简单赋值运算符,用于将右侧的值赋值给左侧的变量

    基本操作符.

    主要用于访问对象的成员,包括数据成员、方法以及命名空间或类型中的成员

    ()

     方法调用操作符允许你传递参数给方法,并执行该方法所定义的代码

    []

    通常用作数组或列表的索引操作符,用于访问、修改或添加数组或列表中的元素

    typeof

    用于检测一个变量或表达式的数据类型

    default

    大部分时候作为默认值存在

    new

    用于创建对象实例

    checked

    用于整数运算及溢出检测有关

    unchecked

    用于整数运算及溢出检测有关

    sizeof

    用于计算变量/数据类型在当前系统中占用内存的字节数

    ->
    算法运算符+

    加法运算符,用于两个数相加

    -

    减法运算符,用于两个数相减

    *

    乘法运算符,用于两个数相乘

    /

    除法运算符,用于两个数相处

    %

    取余运算符,用于两个数相处后取其余数

    ++

    自增运算符,用于将变量值加1(前缀、后缀)

    --

    自减运算符,用于将变量值减1(前缀、后缀)

    比较运算符==

    等于运算符,用于比较两个值是否相同

    !=

    不等运算符,用于比较两个值是否不相同

    >

    大于运算符,用于比较左侧的值是否大于右侧的值

    =

    大于等于运算符,用于比较右侧的值是否大于或等于左侧的值

             一元         >         乘法         >         加减

    移位         >         关系和类型检测         >         相等

    位"与"         >         位"异或"         >         位"或"

    短路"与"         >         短路"或"         >         null合并         >         条件

    赋值(从右向左运算)

    优先级越高,在程序中运算就越靠前

    操作符的优先级

    • 可以使用圆括号提高括号内表达式的优先级
    • 圆括号可以嵌套
    • C#语言中“[ ]”与“{ }”有专门的用途

      同优先级操作符的运算顺序

      • 除了带赋值功能的操作符,同优先级操作符都是由左向右进行计算
      • 带有赋值功能的操作符的运算顺序是由右向左
      • 与数学运算不同,计算机语言的同优先级运算没有“结合率”

        6.表达式

        表达式是一个由变量、常量、运算符和函数等组成的语句,用于计算一个值。这个值可以是整数、浮点数、字符串、布尔值等,取决于表达式的具体构成和类型。

         (1).C#中表达式的分类

        1.任何可以得到值的运算

        2.命名空间

        3.类型

        4.方法组

        5.空值

        6.匿名函数

        7.属性访问

        8.事件访问

        9.索引器访问

        10.对返回值为void的方法的调用(没有任何返回值)

        (2). 语句说明

        1.声明语句

        2.表达式语句

        3.块语句(简称"块")

        4.选择(判断、分支)语句

        5.迭代(循环)语句

        6.跳转语句

        7.try...catch...finally语句

        8.using语句

        9.yield语句

        10.checked/unchecked语句

        11.lock语句(用于多线程)

        12.标签语句

        13.空语句

        7.字段

         字段的定义:

        • 字段(field)是类、结构体或枚举的一个成员,用于存储某种类型的数据
        • 字段是类的状态的一部分,它表示对象的某个属性或特性
        • 字段可以是任何有效的C#数据类型,包括基本数据类型(如int、double、bool等)、用户定义的类型(如类、结构体等)、枚举类型或数组等

           字段的声明:

          • 字段通常在类的主体内部声明,可以有访问修饰符(如public、private、protected)来指定其可见性
          • 尽管字段声明带有分号,但它不是语句
          • 字段的名字一定是名词

            字段的访问: 

            • 字段的访问取决于其访问修饰符
            • 公共字段可以从类的外部访问,而私有字段只能从类的内部访问
            • 受保护的字段可以在派生类中访问
            • 内部字段可以在同一个程序集中的任何位置访问

              字段的初始化: 

              • 无显式初始化时,字段获得其类型的默认值
              • 字段可以在声明时进行初始化,也可以在类的构造函数中进行初始化
              • 只读字段在初始化后将无法再次进行更改
              • 8.属性

                属性的定义:

                • 属性(Property)是特殊成员,他提供了一种灵活机制来读取、写入或计算私有字段的值
                • 属性通常与私有字段一起使用,以实现封装以及数据隐藏
                • 属性包含get和set访问器的声明

文章版权声明:除非注明,否则均为VPS857原创文章,转载或复制请以超链接形式并注明出处。

发表评论

快捷回复:表情:
评论列表 (暂无评论,0人围观)

还没有评论,来说两句吧...

目录[+]

取消
微信二维码
微信二维码
支付宝二维码