C# 实操

文章目录

菜鸟教程 C#

参考菜鸟教程C#

一:简介

  1. 微软(Microsoft)开发的
  2. C# 是 .Net 框架的一部分,且用于编写 .Net 应用程序
  3. C# 是大小写敏感的;所有的语句和表达式必须以分号(;)结尾;程序的执行从 Main 方法开始;
  4. C# 是一门编程语言,而 Mono 是一套跨平台的 .NET 实现

二、 .NET Framework

.NET Framework 是微软 最早推出的 Windows 专属开发框架,专门用来开发 Windows 桌面程序、控制台程序ASP.NET 网站 等。

1、它是一个 "完整的开发平台":自带了大量基础类库(比如文件操作、网络请求、UI 控件),你写 C# 代码时不用从零造轮子。

2、只能在 Windows 上运行 ,不能跨平台(Linux、Mac 用不了)。

3、版本号越高,功能越多、越稳定,也越安全。

三、.Net Core/.NET 5+

最主要的区别:支持跨平台;

四、C#版本

比如顶级语言支持C#9.0以上,但是如果你的框架是4.7.2就不支持;

五、C# AI助手

VSCode 的插件 Fitten Code

六、开发工具

开发IDE:首选 Visual Studio实操

具体安装使用说明,可以参考我的另外一篇文章。

目前使用的是VS 2019;

B站教程 C#

参考B站教程C#

002 C#简介

微软推出得一门编程语言:现代化、强类型、面向对象

C#应用领域:

桌面应用WPF/Winforms ;

Web开发(ASP.NET Core);

后端开发;

游戏开发;

.NET 运行时和一整套开发框架:

C#运行需要.NET;C#不等于.NET

.NET 版本区分:

.Net Framework:老Windows项目

.Net Core:跨平台,过渡版本

.Net:现代和未来,从.NET5开始

003 开发环境

Visual Studio 官网下载安装,社区版即可;

勾选需要的模块,.Net桌面版,默认安装C盘即可

005 变量和类型

区分大小写,驼峰命名法;

csharp 复制代码
float c = 0.45f; // 单精度 浮点数  带后缀
double d = 12.3456; // 双精度 浮点数 不带后缀
decimal m = 3.45m;  // 钱类型 浮点数 带后缀
Console.WriteLine($"{c} {d} {m}");


int a = 1;
int b = 2;
 int result = a + b;
 // 占位符 方式
 Console.WriteLine("{0}+{1}= {2}",a,b,result);
 // 字符串插值 方式
 Console.WriteLine($"{a}+{b}= {result}");


 Console.ReadLine();

007 类

类的 成员变量,先声明实例,再使用;

类的 静态变量,可以直接使用;

csharp 复制代码
class Person {
    // public 类外可以访问
    // private 默认,外部不可访问
    public int _age; // 成员变量,先声明实例,再使用
    public string _name;
    public static int maxAge =100; // 类的静态变量,直接使用

}
csharp 复制代码
static void Main(string[] args)
{
// 实例化类,调用类的成员变量
 Person p = new Person();
 p._age = 12;
 p._name = "xiaoming";

 Person p2 = new Person();
 p2._age = 14;
 p2._name = "xiaohong";

 // 调用类得静态变量
 int maxage = Person.maxAge;
}

008 方法

方法必须写在类里面,没有全局方法;

情景一:控制台程序

1、VS新建

2、程序结构

csharp 复制代码
// C# 大小写敏感
// 所有语句和表达式 ; 结尾
// 程序的执行从Main方法开始

//命名空间 using 
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

// 顶级语言必须是 C#9.0版本以上才支持
// Console.WriteLine("Hello, World!");

// namespace 命名空间声明
namespace ConsoleApp1
{
    // class 声明
    class Program
    {
        // Main方法 所有C#入口点
        static void Main(string[] args)
        {
            Console.WriteLine("Hello World");

            //这使得程序会等待一个按键的动作,防止程序从 Visual Studio.NET 启动时屏幕会快速运行并关闭。
            Console.ReadKey();

        }
    }
}

3、基本语法

C# 是一种面向对象 的编程语言。

在面向对象的程序设计方法中,程序由各种相互交互的对象组成。

相同种类的对象通常具有相同的类型,或者说,是在相同的 class 中。

csharp 复制代码
// C# 大小写敏感
// 所有语句和表达式 ; 结尾
// 程序的执行从Main方法开始

//命名空间 using 
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

// 顶级语言必须是 C#9.0版本以上才支持
// Console.WriteLine("Hello, World!");


// namespace 命名空间声明
namespace ConsoleApp1
{
    // 新增class Rectangle
    class Rectangle {
        // 成员变量
        double length;
        double width;

        // 成员函数
        public void  Acceptdetails()
        {
            length = 4.5;
            width = 8.7;
        }


        public double GetArea()
        {
            return length * width;
        }

       public void Display()
        {
            Console.WriteLine("Length:{0}", length);
            Console.WriteLine("Width:{0}", width);
            Console.WriteLine("Area:{0}", GetArea());

        }
    }


    // class 声明
    class Program
    {
        // Main方法 所有C#入口点
        static void Main(string[] args)
        {
            Console.WriteLine("Hello World");

       

            // 实例化Rectangle类
            Rectangle r = new Rectangle();
            r.Acceptdetails();
            r.Display();


            //这使得程序会等待一个按键的动作,防止程序从 Visual Studio.NET 启动时屏幕会快速运行并关闭。
            Console.ReadKey();

            //这使得程序会等待输入回车键之后,关闭。
            //Console.ReadLine();


        }
    }
}

4、数据类型

4.1 值类型

从类 System.ValueType 中派生的;

csharp 复制代码
// 值类型 sizeof检测占的字节数, 一个字节=8bit
Console.WriteLine("sizeof(bool) is:{0}", sizeof(bool)); // 1
Console.WriteLine("sizeof(char) is:{0}", sizeof(char)); // 2
Console.WriteLine("sizeof(int) is:{0}",sizeof(int)); // 4 
Console.WriteLine("sizeof(long) is:{0}", sizeof(long)); // 8
Console.WriteLine("sizeof(float) is:{0}", sizeof(float)); // 4
Console.WriteLine("sizeof(double) is:{0}", sizeof(double)); // 8
4.2 引用类型

指的是一个内存位置;内置的 引用类型有:object、dynamic 和 string。

Object 对象类型:

是 System.Object 类的别名;

object 是 C# 所有类型的 "爸爸";

当一个值类型转换成对象类型时,称为装箱

当对象类型转换为值类型时,称为拆箱

csharp 复制代码
// 对象类型 object 所有类型的爸爸
object obj = 100;  // 装箱
int a = (int)obj;  // 拆箱
Console.WriteLine(typeof(int));  // 输出:System.Int32
Console.WriteLine(obj.GetType()); 
Console.WriteLine(a.GetType()); // 输出:System.Int32

Dynamic 动态类型:

可以存储任何类型的值在动态数据类型变量中。这些变量的类型检查是在运行时发生的。

String 字符串类型:

System.String 类的别名;

可以通过两种形式进行分配:引号和 @引号;

csharp 复制代码
// 字符串类型 string
string str = "www.baidu.com";
Console.WriteLine("str is {0}, len is {1}",str,str.Length);
string str2 = @"www.baidu.com";
Console.WriteLine(str2);
string str3 = @"<script>
            <!--
             -->
<script>"; //@ 字符串中可以任意换行,换行符及缩进空格都计算在字符串长度之内。
Console.WriteLine("str3 is {0}, len is {1}", str3,str3.Length);
4.3 指针类型

存储另一种类型的内存地址,C# 中的指针与 C 或 C++ 中的指针有相同的功能。

csharp 复制代码
// 指针类型
 unsafe
 {
     char c = 'A';
     char* cptr = &c; // 取 c 的地址给指针
     Console.WriteLine(*cptr); // 输出 A(指针指向的值)
     Console.WriteLine((int)cptr); // 输出 c 的内存地址(十六进制转成了数字)
 }

属性-允许不安全代码,否则报错。

5、数据转换

包含在System.Convert 类中

1、隐式转换:

int - long

byte -int

2、显式转换:

强制类型转换,

csharp 复制代码
// 数据转换
 // 隐式转换
 byte b = 10; 
 int i = b; 
 Console.WriteLine(i.GetType());

 // 显式转换
 int i2 = 10;
 byte b2 = (byte)i2;
 Console.WriteLine(b2.GetType());

 double doubleValue = 3.14;
 int intValue = (int)doubleValue;
 Console.WriteLine(intValue);


 int intValue2 = 43;
 string strValue = intValue2.ToString();
 Console.WriteLine(strValue);

float floatValue = (float)intValue2;
 Console.WriteLine(floatValue.ToString("0.00"));

string str4 = "123";
int number = Convert.ToInt32(str4); // 转换成功,number为123

6、C#变量作用域

静态方法里,只能直接访问静态变量 / 静态方法

要访问非静态成员必须先 new 一个对象 ,通过对象访问。

静态成员属于「类」,非静态成员属于「对象」。

csharp 复制代码
// class 声明
class Program
{
    int memberVar = 30; // 非静态全局变量
    static  int memberVar2 = 31; // 静态全局变量

    // Main方法 所有C#入口点
    static void Main(string[] args)
    {
        // 调用非静态全局变量
        Program p = new Program();
        Console.WriteLine(p.memberVar);


        // 直接调用静态全局变量
        Console.WriteLine(memberVar2);

        //这使得程序会等待一个按键的动作,防止程序从 Visual Studio.NET 启动时屏幕会快速运行并关闭。
        Console.ReadKey();

    }
}

7、C#类型

求字节数 用 sizeof

取类型信息 用typeof

常量:const

csharp 复制代码
// sizeof
Console.WriteLine(sizeof(int));// 4
// typeof  只能写类 / 类型名,不能写对象 / 变量名
Type typeis = typeof(ConstTest); //ConstTest 类名
Console.WriteLine(typeis); // ConsoleApp1.ConstTest
Console.WriteLine(typeof(String)); // System.String

**

构造函数**有两个硬性规则:

1、名字必须和类名完全一样(区分大小写)

2、不能写返回值类型(连 void 都不用)

csharp 复制代码
class ConstTest
{
   public int x;
   public int y;
   public const int c1 = 5;
   public const int c2 = c1 + 5;

   // 构造函数 创建对象时初始化成员变量
   // 1、名字必须和类名完全一样(区分大小写)
   // 2、不能写返回值类型(连 void 都不用)
   public ConstTest(int p1, int p2)
   {
       x = p1;
       y = p2;
   }

   // 普通方法 必须写返回值 没有用void
   public void printInfo()
   {
       Console.WriteLine("ConstTest-printInfo -const c1 is {0},const c2 is {1}", c1, c2); // 5,10
       Console.WriteLine("ConstTest-printInfo -int x is {0},int y is {1}", x, y); // 如果构造函数,传递多少 ,显示多少;如果不构造,默认显示0
   }

}
csharp 复制代码
// 调用其他类
// 1_1. 创建 ConstTest 对象,有构造函数,给x和y赋值 
ConstTest testObj = new ConstTest(55, 100);
// 1_2. 创建 ConstTest 对象,没有有构造函数,不给x y 赋值
//ConstTest testObj = new ConstTest();

// 2. 调用对象的普通方法 printInfo()
testObj.printInfo();

// 3. 也可以直接访问对象的成员变量
Console.WriteLine("x:{0} y:{0} ", testObj.x, testObj.y);

8、C#封装

封装被定义为"把一个或多个项目封闭在一个物理的或者逻辑的包中"。

在面向对象程序设计方法论中,封装是为了防止对实现细节 的访问。

C# 封装根据具体的需要,设置使用者的访问权限 ,并通过 访问修饰符 来实现

注意:如果没有指定访问修饰符 ,则使用类成员的默认访问修饰符,即为 private

1、Public:所有对象都可以访问;

2、 Private:对象本身对对象内部可以访问;

3、 Protected:只有该类对象及其子类对象可以访问;

更好实现继承;

4、 Internal:同一程序集的对象可以访问;

internal:同一个项目里用;

public:给外部项目用;

类的成员变量,默认推荐用 internal 或 private,不要随便用 public;

5、 Protected Internal:访问限于当前程序集或派生自的包含类的类型;

也被用于实现继承;

9、C#方法

情景二:Visual Studio

NuGet 包

NuGet 包 = .NET/ C# 世界的 "插件安装包";

情景二:Winform

情景三:ASP.NET 网站

情景四:WPF

相关推荐
雪落漂泊1 小时前
C++ 继承与多态(上)
开发语言·c++
skywalk81631 小时前
我想基于kotti-py312 ,制作一个多中文编程语言的宣传网站,主要包括文档、playground 示例和学习 (Codearts制作)
开发语言·学习·编程
聆风吟º1 小时前
【C++11新章】列表初始化详解
开发语言·c++·列表初始化
Fms_Sa1 小时前
贪心算法-背包问题
算法·贪心算法·c#
闪电悠米1 小时前
黑马点评-秒杀优化-04_lua_and_db_fallback
服务器·开发语言·网络·数据库·缓存·junit·lua
Shadow(⊙o⊙)1 小时前
进程间通信0.0-pipe()匿名管道,详细分析进程池调度队列执行逻辑,进程池模拟实现。
linux·运维·服务器·开发语言·c++
指尖的爷1 小时前
C++头文件的作用
开发语言·c++
keykey6.1 小时前
反向传播与梯度下降:神经网络如何学习
开发语言·人工智能·深度学习·机器学习
Jun6261 小时前
QT(5)-第三方日志系统
开发语言·数据库·qt