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)https://csdnimg.cn/release/blog_editor_html/release2.3.6/ckeditor/plugins/CsdnLink/icons/icon-default.png?t=N7T8https://visualstudio.microsoft.com/zh-hans/downloads/
https://i-blog.csdnimg.cn/blog_migrate/ca3f77e5db36cfeb51632e2317f4302f.png 社区版对于个人利用免费,用于学习以及个人项目开辟够用了
https://i-blog.csdnimg.cn/blog_migrate/4489a52fe77e809323b2983fdb32492e.png
固然故意人花点心思也可以白嫖专业版
二、从Hello World开始学习C#
1.控制台程序输出Hello World
选择新建一个项目
https://i-blog.csdnimg.cn/blog_migrate/b80b12e890bd624e42a794b4b5e40c89.png
按需求分类后选择对应开辟环境
https://i-blog.csdnimg.cn/blog_migrate/3a6d1094a2ebda760e0aa0c91b21d2da.png开始写代码
https://i-blog.csdnimg.cn/blog_migrate/d78f5515d3632ad719a3ec1147e4f7a6.png 代码如下:
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(); 在控制台输出一行文本
按下恣意键后继承
https://i-blog.csdnimg.cn/blog_migrate/242812a27c2bb6bc823c1125410b0dc8.png
单击F5举行调试运行
Ctrl + F5举行不调试运行
2.Windows窗口应用输出Hello World(WinForms)
创建Windows窗口应用
https://i-blog.csdnimg.cn/blog_migrate/20de9294f6c3979b3789907c31ef6283.png 点击后等待
https://i-blog.csdnimg.cn/blog_migrate/f4863253db8f064cc4d21671e330e8fb.png
https://i-blog.csdnimg.cn/blog_migrate/939c2703b86b8fd7665411a142de0d10.png
https://i-blog.csdnimg.cn/blog_migrate/8cf8c118a4dbc58d3c139c4bd620e900.png
https://i-blog.csdnimg.cn/blog_migrate/f4b8412e7c27053380f190153c0c5341.png
https://i-blog.csdnimg.cn/blog_migrate/d51db8d0a42ca9345b83e36a2682476e.pnghttps://i-blog.csdnimg.cn/blog_migrate/31b8eae28107ffd43160de2ef434d4ba.pnghttps://i-blog.csdnimg.cn/blog_migrate/db78dfc590ad79a38ed9b706c274f023.png
实当代码:
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" ;
}
}
}
实现效果:
https://i-blog.csdnimg.cn/blog_migrate/2874067309590dce335dfd1569aec91a.png
实现原理:
textShowHello.Text = "Hello World" ; 在举动变乱面板双击鼠标点击变乱,通过代码实现点击变乱
textShowHello:在属性面板本身设置的文本框控件名
Text:用于设置或获取文本框内的值(在此变乱中为设置值Hello World)
3.WPF应用程序输出Hello World
创建WPF应用程序
https://i-blog.csdnimg.cn/blog_migrate/fb3e5537c91ebb1286fb6a0d5d3af5d1.png
注意:WPF也被看做WinForms的升级版
https://i-blog.csdnimg.cn/blog_migrate/780fdbf4457fe643c5b246d9df93588e.png
记得给控件取名字 (养成精良风俗)
https://i-blog.csdnimg.cn/blog_migrate/cf7e610de0bb65a2c6a6de8d3608e53d.png 为Button控件添加变乱
点击闪电图标进入变乱栏 ,双击Click创建点击变乱
https://i-blog.csdnimg.cn/blog_migrate/1436f4804496f8b0dab7605ae4a1eb54.png
在方法中写代码实现点击变乱
https://i-blog.csdnimg.cn/blog_migrate/b6a78a78e0589590fef10b1f255757e9.png
实当代码:
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";
}
}
}
实现效果:
https://i-blog.csdnimg.cn/blog_migrate/67ed495b1a775045979f82af65851eb8.png
单击按钮输出Hello World
三、开端认识类和定名空间
类(Class):构成程序的主体,是实际天下事物的模子
定名空间(namespace):以树型结构构造类(和其他类型)
类与对象的关系:对象(实例),就是类的实例化,类是一个概念,而对象就是存在概念中的个体,比如动物是一个概念也就是一个类,而狗就是一个对象,猫也是一个对象,你可以说狗和猫是动物,但是你不能说动物肯定就是狗和猫。
1.类的三大成员(初学可以在实例中慢慢探索,没须要一开始就花太多时间去穷究理论)
属性(Property):属性用于封装对象的状态。
方法(Method):方法用于封装对象的举动和功能。
变乱(Event):变乱用于实现观察者模式,实现对象间的松耦合通讯。
2.类与定名空间的利用(创建一个.Net Framework控制台应用 )
在一个项目中,我们会创造许多的类,同时也会利用许多官方已经界说好的类,在VS中类被靓青色标识
https://i-blog.csdnimg.cn/blog_migrate/0dcab88b4864f16727902745553fe57b.png引用定名空间可以淘汰代码量、进步开辟服从
比方:
引用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("图书馆里有什么?");实现效果:
https://i-blog.csdnimg.cn/blog_migrate/6a8a1b5d5746f0ee24739ab4563e2923.png
未引用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定名空间,那么在每次利用其中的类型或方法时,都必要利用完整的定名空间路径来指明其所在。
https://i-blog.csdnimg.cn/blog_migrate/2efed76f24d3f0e81deec2ac25be892d.png
错误利用时:
将鼠标焦点放在红色波浪线上按Alt + Enter 大概点击带红叉的小灯胆
https://i-blog.csdnimg.cn/blog_migrate/d38b8232af325e576e3c9a85853ae1f0.png
https://i-blog.csdnimg.cn/blog_migrate/d8272ebdc56cdc1fb782a133b5d6da6f.png 查察错误信息,选择办理方案
3.定名空间中的类辩说
引用定名空间的意义在于简化开辟制止类名辩说,差异的定名空间大概包罗相同的类名,指定不明就会引起辩说
https://i-blog.csdnimg.cn/blog_migrate/29355eb2f21a7cadada26c07148baabb.png
https://i-blog.csdnimg.cn/blog_migrate/7283f63f5bdfabc7567ffe5f0d58ea1d.png 假如同时引用定名空间System.Windows.Shapes与System.IO
https://i-blog.csdnimg.cn/blog_migrate/faab937c5bd025a3f7f5fb8f97d53002.png 假如不利用的定名空间请不要引用,制止类辩说。
4.类库的引用
类库引用是利用定名空间的物理底子
引用可分为两类:DLL引用(黑盒,无源码)、项目引用(白盒,有源码)
官方类库引用(Console应用程序)
1.打开对象欣赏器
https://i-blog.csdnimg.cn/blog_migrate/cb192feddc268521e01e8eccf82edf8f.png
2.选择全部组件,搜索需求类库
https://i-blog.csdnimg.cn/blog_migrate/de48756efaaa999c53df246598c10a69.png
3.添加至当前项目,单击所需类库,点击添加
https://i-blog.csdnimg.cn/blog_migrate/d0a950fd5f2e6685fcfdb9612deaed0e.png
NuGet包引用
1.右键依靠项,选择NuGet管理
https://i-blog.csdnimg.cn/blog_migrate/9196b934019aa783e82efe4905451241.png
2.搜索需求包并下载,左上方查察已安装以及更新利用
https://i-blog.csdnimg.cn/blog_migrate/7544d00e755bcccc41cf4eb2a5a07670.png
3.利益
别人整合好的类库,不必要本身去梳理关系,安装完毕后即可立即利用
DDL引用(黑盒,无源码)
1.右键依靠项,选择添加项目引用
https://i-blog.csdnimg.cn/blog_migrate/06943923e45ba3d284a73d2f46a5638b.png
2.点击欣赏,在盘算机中找到必要利用的类库
https://i-blog.csdnimg.cn/blog_migrate/c1d648700bee83ccad4d0a0cc95be7b4.png
3.查察类库,点击视图,点击对象欣赏器,在左边查察类库中有哪些定名空间以及引用类
https://i-blog.csdnimg.cn/blog_migrate/451a176209ba73c991ed47417bbdcee3.png
4.注意事项
依靠性:DDL引用必要注意类库中的方法是否精确,假如引用的类库中存在错误的方法,则会导致整个项目无法运行
项目引用(白盒,有源码)
1.将本身创建的类库,或找到的开源类库在VS打开并导入项目
https://i-blog.csdnimg.cn/blog_migrate/d96157606d83b79c64e684ae7b3454eb.png
https://i-blog.csdnimg.cn/blog_migrate/196e33d37937fa5ae11e196962dfa2ad.png
2.将类库导入当前项目
https://i-blog.csdnimg.cn/blog_migrate/8a2f91bf2ce920e0c20802605a6b7e55.png
https://i-blog.csdnimg.cn/blog_migrate/024448749a5cfa623b4ff04c3b7e3bcc.png
https://i-blog.csdnimg.cn/blog_migrate/43cb46bb55b4894cae9c338530ea7899.png
https://i-blog.csdnimg.cn/blog_migrate/d940020296f79c2a2adc0d057595ea44.png
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);
}
}
}运行效果
https://i-blog.csdnimg.cn/blog_migrate/fcbca2e5632c0495f39c71a85973cfbf.png
4.白盒引用的利益
单击代码区左侧灰色区域创建断点(利用调试运行F5)
https://i-blog.csdnimg.cn/blog_migrate/2f77729e1e07250e2921883c13968fdd.png
点击逐语句或按F11举行错误查询
https://i-blog.csdnimg.cn/blog_migrate/d08912df4ba9548e593fcf7b2a44f616.png
https://i-blog.csdnimg.cn/blog_migrate/38e8c9b96df2f1f6739e2b6c383e6d5a.png
跳转至断点处对应方法所在类库的位置,自行查错改正。
四、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#字典给过几遍)
https://i-blog.csdnimg.cn/blog_migrate/155af706404de2f16f29db104c480386.png
2.运算符(Operator)
运算符在开辟中的运用极深,明确每一个运算符的寄义和用法黑白常有须要的
这里列举MSDN中所展示的运算符
重要运算符 x.y成员访问f(x)方法和委托调用a数组索引器访问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查抄对象是否兼容于某个类型,返回true或false。x as y 利用符来实验将对象转换为某个类型
假如转换乐成则返回转换后的对象,否则返回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的值给xx 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.注释
注释是程序员开辟过程中对开辟进度以及代码功能的表明
做项目不写注释容易被刺杀。养成好风俗,代码跑到哪注释写到哪
注释分为单行注释和多行注释(块注释)
正常输出
https://i-blog.csdnimg.cn/blog_migrate/2dd6795a3e824295d84d1da34d70b2f4.png
输出效果
1
2
3
4
5
6
7
8
9 单行注释
利用:在必要注释的代码前输入 // 即可注释一行代码
https://i-blog.csdnimg.cn/blog_migrate/3565232396db181bdd8924ad92369643.png
输出效果
1
3
5
7
9 多行注释(块注释)
利用:在必要注释的代码块前输入 /* 在代码块竣事后输入 */ 即可注释一块代码(/**/)
https://i-blog.csdnimg.cn/blog_migrate/361449cf587deab546723b2e992f0b48.png
输出效果
9注释的快捷键:
1.点击工具,选择选项
https://i-blog.csdnimg.cn/blog_migrate/cd6a252f53e9fd010078f0e6eab36d06.png 2.点击键盘,搜索注释,找到注释选中行以及取消注释选中行
https://i-blog.csdnimg.cn/blog_migrate/87f0dc8dc46561df490ab2eba1a5efe3.png
3.设置快捷键
https://i-blog.csdnimg.cn/blog_migrate/e2e67a0ac34c829824f406b4043791c3.png
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();
}
}
} 实现效果:
https://i-blog.csdnimg.cn/blog_migrate/bf74a3f8ff165844370a843dc0cdea57.png
实现分析:
因为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 返回值 ;
} 实例一:加法运算(有参数,有返回值)
https://i-blog.csdnimg.cn/blog_migrate/538a5017c830a28bd4a6d8a661929638.png
实例二:日期打印(无参数,有返回值)
https://i-blog.csdnimg.cn/blog_migrate/024302dc8fb7b8c626f7c285b66d51b8.png
实例三:语句输出(无参数,无返回值)
https://i-blog.csdnimg.cn/blog_migrate/ca575cebfe8c921b0753ccd631f6bba3.png
五、 C#底子方法知识
1.方法的由来
[*]方法(method)的起源必要追溯到早期的编程语言,如高级语言C/C++中的函数(function)即为方法的前身。
[*]方法是面向对象范畴的概念,在非面向对象语言中仍旧称为函数。
举个例子:
(1).用C语言创建一个函数:
1.创建C++空项目
https://i-blog.csdnimg.cn/blog_migrate/83715a59528c1a22e9bf54e303645b97.png
2. 在右侧源文件中创建项目
https://i-blog.csdnimg.cn/blog_migrate/0d88603c068c11f5037bdd3b351f2fec.png 将默认的后缀cpp(C++后缀)改为c(C语言后缀)https://i-blog.csdnimg.cn/blog_migrate/aa6f445f9e9c0ab9ca50d490f5819bfb.png代码实现https://i-blog.csdnimg.cn/blog_migrate/c63e997ecb81dca7923aaacfaa85ca1c.png
#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 ;
} #include <stdio.h>
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 。
实现效果:
https://i-blog.csdnimg.cn/blog_migrate/734588726dc125e0d9c238b5b0d71381.png
(2).用C#创建方法:
实现效果:
https://i-blog.csdnimg.cn/blog_migrate/314b24e964ed9088defc1a865f7c95e5.png
代码实现:
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#中的函数不能独立于类(或结构体)之外
https://i-blog.csdnimg.cn/blog_migrate/54221203c38e8b272eb67f183d59c581.png
https://i-blog.csdnimg.cn/blog_migrate/f5b7fbb07128b508e052a5fbfe8c1178.png
2.方法的复用
https://i-blog.csdnimg.cn/blog_migrate/360a19f58c8ed99e8f0a1a1e93c2981a.png
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#中,方法署名是区分同名但参数差异的方法的告急因素。
方法运用:
https://i-blog.csdnimg.cn/blog_migrate/ac8ece43b262cd7d91291d7f46fc97b1.png
实当代码:
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;
}
}
}
} 常见错误:
https://i-blog.csdnimg.cn/blog_migrate/0f50d589b6c95ee57d3a78733ac3b63b.png
https://i-blog.csdnimg.cn/blog_migrate/31995d3080b5c9c28102939ae82dad90.png
参数类型相同
https://i-blog.csdnimg.cn/blog_migrate/d48da1442ff5d586a4b9d82d1acd0bd5.png
与返回类型无关
https://i-blog.csdnimg.cn/blog_migrate/8d029d6f7c6d8403db3e246a3ee1ed48.png
与参数序次无关
4.构造器(构造函数)
构造器分为两种,一种是有参构造一种是无参构造。在调用一个类时,假如你没有去声明构造,那么系统将默认利用无参构造。
默认利用的构造:
https://i-blog.csdnimg.cn/blog_migrate/3912f7f1451150262f73b73838e5596a.png
创建有参、无参构造各一个
https://i-blog.csdnimg.cn/blog_migrate/c46ded8531017342fa5237bf541665fd.png
代码如下:
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)
类别运算符利用先容赋值运算符= 简单赋值运算符,用于将右侧的值赋值给左侧的变量
https://i-blog.csdnimg.cn/blog_migrate/97bd4148d63f52193314258602011970.png
根本利用符. 重要用于访问对象的成员,包罗数据成员、方法以及定名空间或类型中的成员
https://i-blog.csdnimg.cn/blog_migrate/686d728c34067d15529a790d5a890405.png
() 方法调用利用符允许你通报参数给方法,并实行该方法所界说的代码
https://i-blog.csdnimg.cn/blog_migrate/9c9fbabb0a45690d5547671ebefb6b69.png
[] 通常用作数组或列表的索引利用符,用于访问、修改或添加数组或列表中的元素
https://i-blog.csdnimg.cn/blog_migrate/6076cd4d064971bfc23237042b25f5a5.png
typeof 用于检测一个变量或表达式的数据类型
https://i-blog.csdnimg.cn/blog_migrate/e7d24ab2cf3d3ab7a65ceca11f2b6f8c.png
https://i-blog.csdnimg.cn/blog_migrate/44e893756a35b0955134569665dfecd0.png
default 大部门时间作为默认值存在
https://i-blog.csdnimg.cn/blog_migrate/0d4fd879079f5ca6418f934a0e34e0c3.png
new 用于创建对象实例
https://i-blog.csdnimg.cn/blog_migrate/a25018466d3cf32a70db27d0236fd0fc.png
checked 用于整数运算及溢出检测有关
https://i-blog.csdnimg.cn/blog_migrate/00dbe10ba02f7a1c7d6cdac845c238b8.png
https://i-blog.csdnimg.cn/blog_migrate/7d7dc9fbe22d69ac0d0b171f903ed7fb.png
https://i-blog.csdnimg.cn/blog_migrate/a441e99b46c21c7d067cbe60b52827e2.png
unchecked 用于整数运算及溢出检测有关
https://i-blog.csdnimg.cn/blog_migrate/ba581f111deab54b3ac072b758e4d352.png
https://i-blog.csdnimg.cn/blog_migrate/a0a409bce4414a4c01336587757ed88e.png
https://i-blog.csdnimg.cn/blog_migrate/0864606a305c30fcfad4d70a255b3701.png
sizeof 用于盘算变量/数据类型在当前系统中占用内存的字节数
https://i-blog.csdnimg.cn/blog_migrate/c44c6211632fb813d38e9d3955fe7f34.png
->https://i-blog.csdnimg.cn/blog_migrate/468971243537d76ec91de37fa1637152.png算法运算符+ 加法运算符,用于两个数相加
https://i-blog.csdnimg.cn/blog_migrate/b3678b4b883d2af2572d62a4d36c5bad.png
- 减法运算符,用于两个数相减
https://i-blog.csdnimg.cn/blog_migrate/ade51a99451ab6de6bf10f44a0ae828c.png
* 乘法运算符,用于两个数相乘
https://i-blog.csdnimg.cn/blog_migrate/b3264c324fe7e8ec5184b72ef95d93fe.png
/ 除法运算符,用于两个数相处
https://i-blog.csdnimg.cn/blog_migrate/16819c3bebecbbbeb1cce2455c379fee.png
% 取余运算符,用于两个数相处后取别的数
https://i-blog.csdnimg.cn/blog_migrate/913dd7dbce20bead3d3f7a1c129091a3.png
++ 自增运算符,用于将变量值加1(前缀、后缀)
https://i-blog.csdnimg.cn/blog_migrate/bc4ef005f2142bd3a8f819a79707cd4e.png
-- 自减运算符,用于将变量值减1(前缀、后缀)
https://i-blog.csdnimg.cn/blog_migrate/57ed6998f5747b2140d5aa4a5788d0c9.png
比力运算符== 便是运算符,用于比力两个值是否相同
https://i-blog.csdnimg.cn/blog_migrate/ff488fb85055899102fd045c395d702d.png
!= 不等运算符,用于比力两个值是否不相同
https://i-blog.csdnimg.cn/blog_migrate/1ffc1af7e17814bf159f30f8b10ef13d.png
> 大于运算符,用于比力左侧的值是否大于右侧的值
https://i-blog.csdnimg.cn/blog_migrate/0fd9660320294858c885ffb75fef63a7.png
< 小于运算符,用于比力右侧的值是否小于右侧的值
https://i-blog.csdnimg.cn/blog_migrate/58e437e161a73540f792beb4deb7f462.png
>= 大于便是运算符,用于比力右侧的值是否大于或便是左侧的值
https://i-blog.csdnimg.cn/blog_migrate/decb922280838b7b6807c7fa47b8d95a.png
<= 小于便是运算符,用于比力右侧的值是否小于或便是左侧的值
https://i-blog.csdnimg.cn/blog_migrate/be218f3e51c0cb963bd5671d9c95e50d.png
is 类型转换利用符,用于类型转换和类型兼容性查抄
https://i-blog.csdnimg.cn/blog_migrate/b18bef0fc6f60aaa3a4d94af51e8ad2a.png
as 类型转换利用符,用于类型转换和类型兼容性查抄
https://i-blog.csdnimg.cn/blog_migrate/e31d0f906fe0ee05b6d7f2b8f2b6e41d.png
逻辑运算符&& 逻辑与运算符,用于判断两个条件是否都为真
https://i-blog.csdnimg.cn/blog_migrate/68f1325c1679be05ee25f72504c67dd0.png
|| 逻辑或运算符,用于判断两个条件是否有一个为真
https://i-blog.csdnimg.cn/blog_migrate/5ddc65448dce2e119a5c0ba27eebeb82.png
! 逻辑非运算符,用于对条件取反
https://i-blog.csdnimg.cn/blog_migrate/26d90ddb082cf288e7911236afd32f39.png
位运算符& 位与运算符,用于比力两个数的二进制表现,并返回一个新的数,其每个位举行“与”运算的效果
https://i-blog.csdnimg.cn/blog_migrate/1989c32653b060f6d8a5f4ec46a727f0.png
| 位或运算符,用于比力两个数的二进制表现,并返回一个新的数,其每个位举行“或”运算的效果
https://i-blog.csdnimg.cn/blog_migrate/fe8d530fd7b38e0dae03a2c86528229a.png
^ 位异或运算符,用于比力两个数的二进制表现,并返回一个新的数,其每个位都是两个利用数对应举行“异或”运算的效果
https://i-blog.csdnimg.cn/blog_migrate/6c402a714c0f2b6d0d5568ca083f8097.png
~ 位非(取反)运算符,用于对一个数的二进制表现举行“非”运算,即翻转每个数
https://i-blog.csdnimg.cn/blog_migrate/a924dbf1664e4617544bd83bd01241d9.png
<< 左移运算符,用于将一个数的二进制表现向左移动指定的位数
https://i-blog.csdnimg.cn/blog_migrate/5a14be70ccd48e630767fb4e35e2ebb8.png
>> 右移运算符,用于将一个数的二进制表现向右移动指定的位数
https://i-blog.csdnimg.cn/blog_migrate/d058fb516931031eecd1fc6306454645.png
其他运算符?: 条件(三元)运算符,根据条件选择两值个中的一个https://i-blog.csdnimg.cn/blog_migrate/ea88dce036c3be722d9f3ad19e506346.png
&x 取所在利用符,用于变量的内存所在
https://i-blog.csdnimg.cn/blog_migrate/4b89d755de5641a024a7ef48dc3472a2.png
*x 取引用利用符
https://i-blog.csdnimg.cn/blog_migrate/106a106607b95ac1cecb05dd4c2c9f77.png
(T)x 欺压类型转换
https://i-blog.csdnimg.cn/blog_migrate/02c0b25ac90a9569d66ea0f598ade5b5.png
复合赋值运算符+= 加便是运算符,用于将右侧的值加在左侧的变量上,并将效果赋值给左侧的变量
https://i-blog.csdnimg.cn/blog_migrate/5f87a14e0d11d01790a198bda215a8ed.png
-= 减便是运算符,用于将左侧的变量减去右侧的值,并将效果赋值给左侧的变量
https://i-blog.csdnimg.cn/blog_migrate/864c4e1580bcba15ef04c4c1505f77fc.png
*= 乘便是运算符,用于将左侧的变量乘以右侧的值,并将效果赋值给左侧的变量
https://i-blog.csdnimg.cn/blog_migrate/a4f95a8829994cda0b809831f0be750a.png
/= 除便是运算符,用于将左侧的变量除以右边的值,并将效果赋值给左边的变量
https://i-blog.csdnimg.cn/blog_migrate/e3203f4f0db05fb415d9422eb4a77211.png
%= 模(余)便是运算符,用于将左侧的变量和右侧的值取余,并将效果赋值给左侧的变量
https://i-blog.csdnimg.cn/blog_migrate/32b834f5df42289e7fea62d3c5bdfda2.png
&= 位与便是运算符,用于将左侧的变量和右侧的值举行位与运算,并将效果赋值给左侧的变量
https://i-blog.csdnimg.cn/blog_migrate/b26891c09b0786830468e71af14f41d0.png
|= 位或便是运算符,用于将左侧的变量和右侧的值举行位或运算,并将效果赋值给左侧的变量
https://i-blog.csdnimg.cn/blog_migrate/0a997c20d607d04e65cda8830191cb8d.png
^= 位异或便是运算符,用于将左侧的变量和右侧的值举行位异或运算,并将效果赋值给左侧的变量
https://i-blog.csdnimg.cn/blog_migrate/b899ca2b563e4ae44f12492d6e0fe0fa.png
<<= 左移便是运算符,用于将左侧的变量的二进制表现向左移动右侧指定的位数,并将效果赋值给左侧的变量
https://i-blog.csdnimg.cn/blog_migrate/c79cf50dc4a33408a169e5e53a3895b9.png
>>= 右移便是运算符,用于将左侧的变量的二进制表现向右移动左侧指定的位数,并将效果赋值给左侧的变量
https://i-blog.csdnimg.cn/blog_migrate/560a373b5b0370713dd13588802b90ad.png
接下来对运算符优先级举行排序
根本 > 一元 > 乘法 > 加减
移位 > 关系和类型检测 > 相称
位"与" > 位"异或" > 位"或"
短路"与" > 短路"或" > null归并 > 条件
赋值(从右向左运算)
优先级越高,在程序中运算就越靠前
利用符的优先级
[*]可以利用圆括号进步括号内表达式的优先级
[*]圆括号可以嵌套
[*]C#语言中“[ ]”与“{ }”有专门的用途
同优先级利用符的运算序次
[*]除了带赋值功能的利用符,同优先级利用符都是由左向右举行盘算
[*]带有赋值功能的利用符的运算序次是由右向左https://i-blog.csdnimg.cn/blog_migrate/0d2a4565a3018d867f2636265d9f78c2.png
[*]与数学运算差异,盘算机语言的同优先级运算没有“联合率”
6.表达式
表达式是一个由变量、常量、运算符和函数等构成的语句,用于盘算一个值。这个值可以是整数、浮点数、字符串、布尔值等,取决于表达式的具体构成和类型。
(1).C#中表达式的分类
1.任何可以得到值的运算
https://i-blog.csdnimg.cn/blog_migrate/87ad87a42623699152241037711d304a.png
2.定名空间
https://i-blog.csdnimg.cn/blog_migrate/dcc122b6442bee2c8f6de1c8459f1335.png
3.类型
https://i-blog.csdnimg.cn/blog_migrate/be426b59dfb36243f8a765daa07bdad0.png
4.方法组
https://i-blog.csdnimg.cn/blog_migrate/dc8119ac3d0f6401811a6a87be1e6338.png
5.空值
https://i-blog.csdnimg.cn/blog_migrate/881329fb92b7e3017f5bcc0478022d81.png
6.匿名函数
https://i-blog.csdnimg.cn/blog_migrate/dbc7f12dc702a3cc872fb162279ea592.png
7.属性访问
https://i-blog.csdnimg.cn/blog_migrate/6be782d835157c265913e6f2fc8ebf78.png
8.变乱访问
https://i-blog.csdnimg.cn/blog_migrate/67a7ce07b4982722f9fcb733a6cbf74f.png
https://i-blog.csdnimg.cn/blog_migrate/38334c48f842ae816caff6bd7053cf5f.png
9.索引器访问
https://i-blog.csdnimg.cn/blog_migrate/3241908bc170bec3e2a5994923d27ebf.png
10.对返回值为void的方法的调用(没有任何返回值)
https://i-blog.csdnimg.cn/blog_migrate/4b30ae082c4b63d74f16c871b2216256.png
https://i-blog.csdnimg.cn/blog_migrate/7f067a68f6c19f6fd23391f7d5306ca9.png
(2). 语句说明
1.声明语句
https://i-blog.csdnimg.cn/blog_migrate/4416ea73b6b4aeb17c3360f4133563b8.png
2.表达式语句
https://i-blog.csdnimg.cn/blog_migrate/d07b4b179173de87d7235125ad645c14.png
3.块语句(简称"块")
https://i-blog.csdnimg.cn/blog_migrate/6db50a560b5aaa479e404d1c2eca09ad.png
4.选择(判断、分支)语句
https://i-blog.csdnimg.cn/blog_migrate/a326e0942ce8f7cb7e6f1dc92d3b31b1.png
5.迭代(循环)语句
https://i-blog.csdnimg.cn/blog_migrate/dc8f2d694c287c07d3cb73bde2f9109e.png
6.跳转语句
https://i-blog.csdnimg.cn/blog_migrate/026a6634e9d2749eafb0b14f538cdc05.png
7.try...catch...finally语句
https://i-blog.csdnimg.cn/blog_migrate/3730c680106e3be8cfd9a571b3423f10.png
https://i-blog.csdnimg.cn/blog_migrate/6304725d5c5234cee1c3b0b504bf27bc.png
8.using语句
9.yield语句
10.checked/unchecked语句
11.lock语句(用于多线程)
12.标签语句
13.空语句
7.字段
字段的界说:
[*]字段(field)是类、结构体或枚举的一个成员,用于存储某种类型的数据
[*]字段是类的状态的一部门,它表现对象的某个属性或特性
[*]字段可以是任何有用的C#数据类型,包罗根本数据类型(如int、double、bool等)、用户界说的类型(如类、结构体等)、枚举类型或数组等
字段的声明:
[*]字段通常在类的主体内部声明,可以有访问修饰符(如public、private、protected)来指定其可见性
[*]只管字段声明带有分号,但它不是语句
[*]字段的名字肯定是名词
字段的访问:
[*]字段的访问取决于其访问修饰符
[*]公共字段可以从类的外部访问,而私有字段只能从类的内部访问
[*]受掩护的字段可以在派生类中访问
[*]内部字段可以在同一个程序会合的任何位置访问
字段的初始化:
[*]无显式初始化时,字段得到其类型的默认值
[*]字段可以在声明时举行初始化,也可以在类的构造函数中举行初始化
[*]只读字段在初始化后将无法再次举行更改
[*]https://i-blog.csdnimg.cn/blog_migrate/2c63775d08a13102703bcc90b720086e.png
8.属性
属性的界说:
[*]属性(Property)是特别成员,他提供了一种机动机制来读取、写入或盘算私有字段的值
[*]属性通常与私有字段一起利用,以实现封装以及数据隐藏
[*]属性包罗get和set访问器的声明
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页:
[1]