当前位置: 代码网 > it编程>编程语言>Asp.net > C#从零开始学习(图文教程),持续更新中~

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

2024年07月28日 Asp.net 我要评论
理论知识固然重要,但是只读理论往往是枯燥的,只有通过不断的实践和探索,才能更高效的进行学习。

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

目录

一、开发环境准备

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)icon-default.png?t=n7t8https://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();
        }
    }
}

 

单击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" ;
        }
    }
}

实现效果:

实现原理:

 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
{
    /// <summary>
    /// interaction logic for mainwindow.xaml
    /// </summary>
    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 ;

namespace helloworld  {
    class hello {
        static void main(string[] args) {
            system.console.writeline("图书馆里有什么?");
            system.console.writeline("红楼梦?");
            system.console.writeline("西游记?");
            system.console.writeline("水浒传?");
            system.console.writeline("三国演义?");          
        }
    }
}

错误使用时:

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

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

3.命名空间中的类冲突

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

 如果同时引用命名空间system.windows.shapessystem.io

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

4.类库的引用

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

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


四、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 >> y右移
关系和类型运算符
x < y小于
x > y大于
x >= y大于或等于
x <= y小于或等于
x is y如果x是t,则返回true,否则返回false
x as y返回类型为t的x,如果x不是t,则返回null
相等运算符
x == y等于
x != y不等于
逻辑、条件和null运算符
逻辑“与”x & y整型按位“与”,布尔型逻辑“与”
逻辑“异或”x ^ y整型按位“异或”,布尔型逻辑“异或”
逻辑“或”x | y整型按位“或”,布尔型逻辑“或”
短路“与”x && yx y必须全为true,方法才会运行
短路“或”x || yx y有一个为true,则方法正常运行
null合并x ?? y如果x为null则计算结果为y,反之计算结果为x
条件运算x ?: y : z如果x为true则计算结果为y,反之计算结果为z
赋值和匿名运算符
x = y赋值,x = y不是x等于y而是把y的值给x
x op= y复合赋值。支持这些运算符:+=、-=、*=、/=、%=等
(t 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.设置快捷键

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();
        }   
    }
 
}

实现效果: 

实现解析:

 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 <stdio.h>

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 ;
}

实现结果:

(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;
        }
    }
}

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 ;
        }
    }
}

3.方法的重载

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

方法运用:

实现代码:

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.构造器(构造函数)

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

默认使用的构造:

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

5.操作符(运算符)

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

操作符(operator)、操作数(operand)

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

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

基本操作符.

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

()

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

[]

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

typeof

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

default

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

new

用于创建对象实例

checked

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

unchecked

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

sizeof

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

->
算法运算符+

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

-

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

*

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

/

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

%

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

++

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

--

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

比较运算符==

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

!=

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

>

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

<

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

>=

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

<=

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

is

类型转换操作符,用于类型转换和类型兼容性检查

as

类型转换操作符,用于类型转换和类型兼容性检查

逻辑运算符&&

逻辑与运算符,用于判断两个条件是否都为真

||

逻辑或运算符,用于判断两个条件是否有一个为真

!

逻辑非运算符,用于对条件取反

位运算符&

位与运算符,用于比较两个数的二进制表示,并返回一个新的数,其每个位进行“与”运算的结果

|

位或运算符,用于比较两个数的二进制表示,并返回一个新的数,其每个位进行“或”运算的结果

^

位异或运算符,用于比较两个数的二进制表示,并返回一个新的数,其每个位都是两个操作数对应进行“异或”运算的结果

~

位非(取反)运算符,用于对一个数的二进制表示进行“非”运算,即翻转每个数

<<

左移运算符,用于将一个数的二进制表示向左移动指定的位数

>>

右移运算符,用于将一个数的二进制表示向右移动指定的位数

其他运算符?:

条件(三元)运算符,根据条件选择两值个中的一个

&x

取地址操作符,用于变量的内存地址

*x

取引用操作符

(t)x

强制类型转换

复合赋值运算符+=

加等于运算符,用于将右侧的值加在左侧的变量上,并将结果赋值给左侧的变量

-=

减等于运算符,用于将左侧的变量减去右侧的值,并将结果赋值给左侧的变量

*=

乘等于运算符,用于将左侧的变量乘以右侧的值,并将结果赋值给左侧的变量

/=

除等于运算符,用于将左侧的变量除以右边的值,并将结果赋值给左边的变量

%=

模(余)等于运算符,用于将左侧的变量和右侧的值取余,并将结果赋值给左侧的变量

&=

位与等于运算符,用于将左侧的变量和右侧的值进行位与运算,并将结果赋值给左侧的变量

|=

位或等于运算符,用于将左侧的变量和右侧的值进行位或运算,并将结果赋值给左侧的变量

^=

位异或等于运算符,用于将左侧的变量和右侧的值进行位异或运算,并将结果赋值给左侧的变量

<<=

左移等于运算符,用于将左侧的变量的二进制表示向左移动右侧指定的位数,并将结果赋值给左侧的变量

>>=

右移等于运算符,用于将左侧的变量的二进制表示向右移动左侧指定的位数,并将结果赋值给左侧的变量

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.字段

8.属性

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com