1.基础
//引用命名空间
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
//项目名或者命名空间
namespace _01_MY_First_Demo
{
//Program类
class Program
{
//程序的主入口或者Main函数
static void Main(String[] agrs)
{
Console.WriteLine("Hello, World11!");
}
}
}
2.打印日志
Console.WriteLine("Hello, World11!");
//让程序暂停
Console.ReadKey();
---------------------------------------
//输入数据
string name= Console.ReadLine();
Console.WriteLine(name);
3.注释
// 1.单行注释
2.多行注释
/*
Console.WriteLine("Hello, World11!");
Console.WriteLine("Hello, World11!");
Console.WriteLine("Hello, World11!");
Console.WriteLine("Hello, World11!");
Console.WriteLine("Hello, World11!");
Console.WriteLine("Hello, World11!");*/
/// 3.文档注释
/// <summary>
/// 这个方法的作用
/// </summary>
/// <param name="agrs">第一个参数</param>
4.快捷键
ctrl+k+c :注释所选代码
ctrl+k+u :取消注释所选代码
ctrl+k+d :快速对齐代码
ctrl+j :快速智能提示
折叠没用代码
#region 没用的代码
//Console.ReadKey();
//Console.ReadKey();
//Console.ReadKey();
//Console.ReadKey();
//Console.ReadKey();
#endregion
5.常见数据类型
在C#中,有以下常见的数据类型:
1. 值类型(Value Types):
- 整数类型:`int`, `long`, `short`, `byte`, `sbyte`, `uint`, `ulong`, `ushort`
- 浮点类型:`float`, `double`
- 字符类型:`char`
- 布尔类型:`bool`
- 十进制类型/金钱类型:`decimal`
int A0 = 3;
float A1 = 520.1314131413141314F;
double A2 = 520.1314131413141314;
//用来存储金钱,后面要加个M
decimal A3 = 520.1314131413141314M;
Console.WriteLine(A1);
Console.WriteLine(A2);
Console.WriteLine(A3);
//用来存储单个字符,需要用单引号引起来。
char ch1 = 'B';//定义字符使用单引号
char ch2 = '\x0042';//使用十六进制编码来表示字符B
Console.WriteLine(ch1);
Console.WriteLine(ch2);
2. 引用类型(Reference Types):
- 字符串类型:`string`
- 数组类型:`int[]`, `string[]`, 等等
- 类类型:自定义的类、结构体、枚举等
- 接口类型:`interface`
- 委托类型:`delegate`
3. 空类型(Nullable Types):
- 可以为null的值类型,通过在值类型后面加上`?`来声明,例如:`int?`, `bool?`, `double?`
??用于判断一个变量在为null的时候返回一个指定的值
double? num1 = null;
double? num2 = 3.14157;
double num3;
num3 = num1 ?? 5.34;
此外,C#还提供了一些特殊的数据类型,如:
- `object`:所有类型的基类。
- `dynamic`:表示动态类型,可以在运行时进行类型检查和绑定。
- `var`:隐式类型,由编译器根据赋值语句自动推断类型。
占位符
int n1 = 10;
int n2 = 20;
int n3 = 30;
Console.WriteLine("第一个数字是{0},第二个数字是{2},第三个数字是{1}", n1, n2, n3);
Console.ReadKey();
6.占位符
1.c# 占位符
1.占位符的使用方法:先挖坑,再填坑。
注意点:
2.(1)挖了几个坑,就应该填几个坑,如果多填了,没效果,少填了,报异常。
(2)输出顺序,按照挖坑顺序。
3.代码示例:
(1)这个例子不仅展示了占位符的使用方法,也展示了占位符的输出顺序是按照挖坑顺序来的。
int n1 = 10;
int n2 = 20;
int n3 = 30;
Console.WriteLine("第一个数字是{0},第二个数字是{2},第三个数字是{1}", n1, n2, n3);
Console.ReadKey();
7.常用转义字符
(1)转义字符指的就是一个'\'+一个特殊的字符,组成了一个具有特殊意义的字符。
(2)常用的转义字符
\n:表示换行
\":表示一个英文半角的双引号
\t:表示一个tab键的空格
\b:表示一个退格键(相当于删除键),放到字符串的两边没有效果
\r\n:windows操作系统不认识\n,只认识\r\n,相当于换行
\\:表示一个\
@符号:
(1):取消\在字符串中的转义作用,就是不转义
(2):将字符串按照原格式输出。
Console.WriteLine("您好明天");
Console.WriteLine("您好\n明天");
Console.WriteLine("你想说什么\"\"");
Console.WriteLine("Hello\tWorld");
Console.WriteLine("别做\b梦了");
Console.WriteLine("\b别做梦了");
Console.WriteLine("别做梦了\b");
string str = "阳光明媚\n风和日丽"; System.IO.File.WriteAllText(@"C:\Users\86178\Desktop\1019.txt", str);
string path = "C:\\Users\\86178\\Desktop\\1019.txt";
string path1 = @"C:\Users\86178\Desktop\1019.txt";
Console.WriteLine(path);
Console.WriteLine(path1);
Console.WriteLine(@"阳光明媚
风和日丽");
Console.ReadKey();
8.类型转换
1.显式类型转换(强制类型转换):
int intValue = 10;
double doubleValue = (double)intValue;
2.隐式类型转换:
int intValue = 10;
double doubleValue = intValue;
3.使用Convert类进行类型转换:
int intValue = 10;
string stringValue = Convert.ToString(intValue);
//将 String 表达式转换成 double 类型
String sVaule;
double dVale;
dVale= Convert.ToDouble(sVaule);
//将 String 表达式转换成 bool 类型
String MyString = " true ";
bool MyBool = Convert.ToBoolean( MyString );
4.使用Parse方法进行字符串转换:
string stringValue = "10";
int intValue = int.Parse(stringValue);
5.使用TryParse方法进行安全的字符串转换:
string stringValue = "10";
int intValue;
bool success = int.TryParse(stringValue, out intValue);
if (success)
{
// 转换成功
}
else
{
// 转换失败
}
6.使用ToString方法将基本类型转换为字符串:
int intValue = 10;
string stringValue = intValue.ToString();
9.运算符
11
10.逻辑结构
-------------------if/else--------------------------
if(布尔表达式)
{
语句块 1;
}else{
语句块 2;
}
int num = 10;
if (num > 0)
{
Console.WriteLine("Number is positive");
}
else
{
Console.WriteLine("Number is non-positive");
}
---------------------------
if(布尔表达式 1)
{
语句块 1;
}else if(布尔表达式 2){
语句块 2;
}
…
else{
语句块 n;
}
----------------swich/case--------------
int day = 3;
switch (day)
{
case 1:
Console.WriteLine("Monday");
break;
case 2:
Console.WriteLine("Tuesday");
break;
case 3:
Console.WriteLine("Wednesday");
break;
case 4:
Console.WriteLine("Thursday");
break;
case 5:
Console.WriteLine("Friday");
break;
default:
Console.WriteLine("Weekend");
break;
}
---------------while循环---------
int i = 0;
while (i < 5)
{
Console.WriteLine(i);
i++;
}
--------do/while-------------------
int i = 0;
do
{
Console.WriteLine(i);
i++;
} while (i < 5);
------------for循环---------------
for (int i1 = 1; i1 <= 9; i1++)
{
}
11.异常捕获
结构组成
try
{
<可能出现异常的代码>
}
catch
{
<出现异常后执行的代码>
}
finally
{
<不管有没有异常都要执行的代码(可选)>
}
------------------------------
using System;
namespace ConsoleApplication
{
class Program
{
static void Main(string[] args)
{
string s = Console.ReadLine();
try
{
int n = int.Parse(s);
Console.WriteLine(n);
}
catch
{
Console.WriteLine("输入的不是一个整数");
}
}
}
}
12.三元表达式
Console.WriteLine("请输入第一个数字:");
int n1 = int.Parse(Console.ReadLine());
Console.WriteLine("请输入第二个数字:");
int n2 = int.Parse(Console.ReadLine());
int n3 = n1 > n2 ? n1 : n2;
Console.WriteLine(n3);
Console.ReadKey();
13.常量
所谓常量,就是在程序的运行过程中其值不能被改变的量。常量的类型也可以是任何一种C#的数据类型。常量的定义格式为:
const 常量数据类型 常量名(标识符)=常量值;
const double PI=3.1415926;
const string VERSION=“Visual Studio 2010”;
14.枚举
//枚举声明,如果不声明值,会默认从0 1 2 3开始排列
public enum MyColors
{
Yellow = 1,
Green = 2,
Red = 4,
Blue = 8
}
//枚举引用
MyColors ss= MyColors.Yellow;
Console.WriteLine(ss);
--------------
MyColors ss = MyColors.Yellow;
//强制类型转换,获取数值
int sd = (int)ss;
Console.WriteLine(sd);
15.结构
//struct 语句为程序定义了一个带有多个成员的新的数据类型。例如,您可以按照如下的方式声明 Book 结构:
//可以帮助我们一次性声明多个不同类型的变量
//变量在程序运行期间只能存储一个值,而字段可以存储多个值。
struct Books
{
public string _title;//字段,不是变量,加下划线
public string _author;
public string _subject;
public int _book_id;
};
Books b;
b._title = "1";
b._author = "2";
Books A;
A._title = "1";
A._author = "2";
16.数组
//1.数组是一个引用类型,所以需要使用 new 关键字来创建数组的实例
double[] balance = new double[10];
string[] sarray = { "Hello", "From", "Tutorials", "Point" };
//2.数组赋值
//2.1索引赋值
double[] balance = new double[10];
balance[0] = 4500.0;
//2.2声明时赋值
double[] balance = { 2340.0, 4523.69, 3421.0};
//2.3也可以省略数组的大小
int [] marks = new int[] { 99, 98, 92, 97, 95};
3.访问数组元素
3.1通过索引访问
double salary = balance[9];
3.2遍历数组for循环
int[] n = new int[10];//声明一个大小是10的数组
//初始化数组
for(int i=0;i<10;i++)
{
n[i] = i + 100;
}
3.3遍历数组,foreach
foreach(int j in n)
{
int i = j - 100;
Console.WriteLine("n[{0}]={1}", i, j);
}
17.方法/函数
[public] [static] 返回值类型 方法名字([参数列表])
{
方法体
}
-------------------------------
public static int MaxArr(int[] a)
{
int temp = Int32.MinValue;
for (var i = 0; i < a.Length; i++)
{
if (a[i]>temp)
{
temp = a[i];
}
}
return temp;
}
//方法调用,在main函数中调用
int result = MaxArr(new int[]{20,0,-10,30,25,-100});
Console.WriteLine("数组中最大值为:"+result);
//不自动关闭控制台,等待输入
Console.ReadLine();
18.高级参数out、ref、params
1//return返回一个值,out可以返回多个值
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ChuangzhiConsel
{
class Program
{
static void Main(string[] args)
{
int[] n = new int[11];
int re_max;
int re_min;
double re_sum;
double re_avg;
Random r = new Random();
for (int i = 0; i < n.Length; i++)
{
n[i] = r.Next(0, 12);
Console.Write("{0} ", n[i]);
}
Test(n, out re_max, out re_min, out re_sum, out re_avg);
//真正将re_avg保留两位
Console.WriteLine("\n返回的最大值:{0},最小值:{1},总和:{2},均值:{3:0.000}", re_max, re_min, re_sum, re_avg);
re_avg = Convert.ToDouble(re_avg.ToString("0.00"));
Console.WriteLine("真正re_avg保留两位:{0}", re_avg);
Console.ReadKey();
}
/// <summary>
/// 计算最大、最小、总和、均值
/// </summary>
/// <param name="nums"></param>
/// <param name="max"></param>
/// <param name="min"></param>
/// <param name="sum"></param>
/// <param name="avg"></param>
public static void Test(int[] nums, out int max, out int min, out double sum, out double avg)
{
max = int.MinValue;
min = int.MaxValue;
sum = 0;
avg = 0;
for (int i = 0; i < nums.Length; i++)
{
if (nums[i] > max)
{
max = nums[i];
}
if (nums[i] < min)
{
min = nums[i];
}
sum += nums[i];
avg = sum / nums.Length;
}
}
}
}
//ref将实参代入方法中进行修改,返回修改后了的值,不需要return一个定义的形参;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ChuangzhiConsel
{
class Program
{
static void Main(string[] args)
{
double salary;
Console.WriteLine("请输入当前薪水:");
salary = Convert.ToDouble(Console.ReadLine());
TestRef(ref salary);//没有声明类型接收
Console.WriteLine("加薪后:{0}", salary);
Console.ReadKey();
}
public static void TestRef(ref double s)//没有返回类型
{
s += 500;
}
}
}
-------------------------------------------
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ChuangzhiConsel
{
class Program
{
static void Main(string[] args)
{
int num1 = 10;
int num2 = 20;
TestRef(ref num1, ref num2);
Console.WriteLine("交换后:num1={0} num2={1}",num1,num2);
Console.ReadKey();
}
/// <summary>
/// 用于不另外开辟变量的情况下,交换两个变量值
/// </summary>
/// <param name="n1">第一个变量</param>
/// <param name="n2">第二个变量</param>
public static void TestRef(ref int n1,ref int n2)//没有返回类型
{
n1 = n1 - n2;
n2 = n1 + n2;
n1 = n2 - n1;
}
}
}
//params可变参数,且参数为最后的定义,用于减少声明的参数
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ChuangzhiConsel
{
class Program
{
static void Main(string[] args)
{
//int[] array = { 1, 2, 3, 4, 5 };
//替换12345这个数组
Tets("张三", 1, 2, 3, 4, 5);
Console.ReadKey();
}
public static void Tets(string name, params int[] grade)
{
int sum = 0;
for (int i = 0; i < grade.Length; i++)
{
sum += grade[i];
}
Console.WriteLine("{0}的总成绩是:{1}", name, sum);
}
}
}
19.方法重载
问:什么是方法的重载?
答:方法的名称相同,但是参数不同。参数不同,分为2种情况:
情况一:如果参数的个数相同,那么参数的类型就不能相同。
情况二:如果参数的类型相同,那么参数的个数就不能相同。
public static void M(int n1, int n2)
{
int result = n1 + n2;
}
public static double M(double d1, double d2)
{
return d1 + d2;
}
public static void M(int n1, int n2,int n3)
{
int result = n1 + n2 + n3;
}
public static string M(string s1, string s2)
{
return s1 + s2;
}
20.类
//1.写一个类
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace _01_MY_First_Demo
{
public class Person
{
public string _name;
public int _age;
public char _gender;
public void CHLSS()
{
Console.WriteLine("吃喝拉撒睡");
}
}
}
//2.new一个对象进行调用
Person sa = new Person();
sa._name = "sss";
sa._age = 6;
sa.CHLSS();
21.属性
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace _01_MY_First_Demo
{
public class Person
{
private string _name;
private int _age;
public char _gender;
public string Name { get => _name; set => _name = value; }
public int Age { get => _age; set => _age = value; }
public void CHLSS()
{
Console.WriteLine("吃喝拉撒睡"+ Name+"年龄"+ Age);
}
}
}
---------------------------------------------------
//创建对象
Person sa = new Person();
sa.Name = "sss";
sa.Age = 6;
sa.CHLSS();
22.静态和非静态的区别
//静态方法
public static void Max(){ }
//非静态方法
public void Max(){ }
//静态类
public static class program{ }
//非静态类
public class program{ }