C# 基础知识(一)

本文是C#编程的基础教程,涵盖了C#的简介、开发环境、基本语法、数据类型、面向对象编程、控制结构、数组、方法、继承等内容。C#是一门面向对象的编程语言,用于.NET框架,具有现代、结构化和高效的特点。文章详细介绍了C#的类、对象、数据存储方式、类型转换以及常用操作,旨在帮助初学者理解C#编程的基础概念和实践技巧。
摘要由CSDN通过智能技术生成


一,简介

C# 是一个现代的、通用的、面向对象的编程语言,它是由微软(Microsoft)开发的,由 EcmaISO 核准认可的。
C# 是专为公共语言基础结构(CLI)设计的。CLI 由可执行代码和运行时环境组成,允许在不同的计算机平台和体系结构上使用各种高级语言。

C# 成为一种广泛应用的专业语言的原因有以下几点:

  • 现代的、通用的编程语言。
  • 面向对象
  • 面向组件
  • 容易学习
  • 结构化语言
  • 可以产生高效率的程序
  • 可以在多种计算机平台上编译
  • .Net 框架的一部分。

C# 强大的编程功能
虽然 C# 的构想十分接近于传统高级语言 CC++,是一门面向对象的编程语言,但是它与 Java 非常相似,有许多强大的编程功能

下面列出 C# 一些重要的功能:

  • 布尔条件(Boolean Conditions)
  • 自动垃圾回收(Automatic Garbage Collection)
  • 标准库(Standard Library)
  • 组件版本(Assembly Versioning)
  • 属性(Properties)和事件(Events)
  • 委托(Delegates)和事件管理(Events Management)
  • 易于使用的泛型(Generics)
  • 索引器(Indexers)
  • 条件编译(Conditional Compilation)
  • 简单的多线程(Multithreading)
  • LINQ 和 Lambda 表达式
  • 集成 Windows
二,环境

C# 是 .Net 框架的一部分,且用于编写 .Net 应用程序。

.Net 框架(.Net Framework)
.Net 框架是一个创新的平台,可以编写出下面类型的应用程序:

  • Windows 应用程序
  • Web 应用程序
  • Web 服务

.Net 框架应用程序是多平台的应用程序。框架的设计方式使它适用于下列各种语言:
C#、C++、Visual Basic、Jscript、COBOL 等等。
所有这些语言可以访问框架,彼此之间也可以互相交互

.Net 框架由一个巨大的代码库组成,用于 C# 等客户端语言。下面列出一些 .Net 框架的组件:

  • 公共语言运行库(Common Language Runtime - CLR)
  • .Net 框架类库(.Net Framework Class Library)
  • 公共语言规范(Common Language Specification)
  • 通用类型系统(Common Type System)
  • 元数据(Metadata)和组件(Assemblies)
  • Windows 窗体(Windows Forms)
  • ASP.Net 和 ASP.Net AJAX
  • ADO.Net
  • Windows 工作流基础(Windows Workflow Foundation - WF)
  • Windows 显示基础(Windows Presentation Foundation)
  • Windows 通信基础(Windows Communication Foundation - WCF)
  • LINQ

C# 编程的开发工具

C# 的集成开发环境(Integrated Development Environment - IDE)
微软(Microsoft)提供了下列用于 C# 编程的开发工具:

  • Visual Studio (VS) (推荐)
  • Visual C# 2010 Express (VCE)
  • Visual Web Developer

在 Linux 或 Mac OS 上编写 C# 程序

虽然 .NET 框架是运行在 Windows 操作系统上,但是也有一些运行于其它操作系统上的版本可供选择。Mono 是 .NET 框架的一个开源版本,它包含了一个 C# 编译器,且可运行于多种操作系统上,比如各种版本的 LinuxMac OS

Mono 的目的不仅仅是跨平台地运行微软 .NET 应用程序,而且也为 Linux 开发者提供了更好的开发工具。Mono 可运行在多种操作系统上,包括 Android、BSD、iOS、Linux、OS X、Windows、Solaris 和 UNIX。

三,基本语法

执行 C# 代码的过程包括下列步骤:

1.选择编译器
2.将代码编译为 MSIL
3.将MSIL编译为本机代码
4.运行代码
5.垃圾回收
注:MSIL包括用于加载,存储和初始化对象以及对对象调用方法的指令,还包括用于算术和逻辑运算,控制流,直接内存访问,异常处理和其他操作的指令。

在面向对象的编程方法中:

  • 对象是核心
  • 对象由类建模而成
  • 把类转换为对象的过程称为类的实例化
  • 对象是消息,数据和行为的组合
  • 对象代表一个实实在在存在的实体(实际物体)或者实际概念
  • 对象往往有边界,有属性,有方法(特定用途)

面向对象的程序设计思想是现代软件开发的基础

面向对象的程序由各种各样的类,对象和方法组成

一般而言,对象具有一下特性:

  • 对象有状态,对象的状态由对象的各种属性和相应值构成
  • 对象可以显示行为(即方法),对象的行为(方法)使对象可以完成相应功能
  • 对象有一个唯一的身份,对象的身份可以把它与其他对象区分开来
    (两个对象可能什么都相同,但是它们不可能有相同的身份)
各种定义

using 关键字:用于在程序中包含命名空间。一个程序可以包含多个 using 语句。在任何 C# 程序中的第一条语句都是:

using System;

class 关键字:用于声明一个

注释:用于解释代码,编译器会忽略注释的条目。在 C# 程序中,多行注释以 /* 开始,并以字符 */ 终止;单行注释是用 ‘//’ 符号表示。

C# 中 // 注释和 /// 注的区别::C# 引入了新的 XML 注释,即我们在某个函数前新起一行,输入 ///,VS.Net 会自动增加 XML 格式的注释
// 不会被编译,而 /// 会被编译
所以使用 /// 会减慢编译速度(但不会影响执行速度)
但使用 /// 会在其它的人调用你的代码时提供智能感知(通常在Form。Designer.cs 窗口会自动生成 /// 注释的程序)

成员变量:变量是类的属性或数据成员,用于存储数据

成员函数:函数是一系列执行指定任务的语句。类的成员函数是在类内声明的。

C# 类的实例化:通过已有的类(class)创建出该类的一个对象(object),这一过程就叫做类的实例化。

标识符:标识符是用来识别类、变量、函数或任何其它用户定义的项目。在 C# 中,类的命名必须遵循如下基本规则:

  • 标识符必须以字母开头,后面可以跟一系列的字母、数字( 0 - 9 )或下划线( _ )。
  • 标识符中的第一个字符不能是数字
  • 标识符必须不包含任何嵌入的空格或符号,比如 ? - +! @ # % ^ & * ( ) [ ] { } . ; : " ’ / \。但是,可以使用下划线( _ )。
  • 标识符不能是 C# 关键字

C# 关键字:关键字是 C# 编译器预定义的保留字。这些关键字不能用作标识符,但是,如果想使用这些关键字作为标识符,可以在关键字前面加上@字符作为前缀。在 C# 中,有些标识符在代码的上下文中有特殊的意义,如 get 和 set,这些被称为上下文关键字(contextual keywords)。

下表列出了 C# 中的保留关键字(Reserved Keywords)和上下文关键字(Contextual Keywords):

保留关键字列表

abstract as base bool break byte case
catch char checked class const continue decimal
default delegate do double else enum event
explicit extern false finally fixed float for
foreach goto if implicit in in (generic modifier) int
interface internal is lock long namespace new
null object operator out out(generic modifier) override params
private protected public readonly ref return sbyte
sealed short sizeof stackalloc static string struct
switch this throw true try typeof uint
ulong unchecked unsafe ushort using virtual void
volatile while

上下文关键字列表

add alias ascending descending dynamic from get
global group into join let orderby partial (type)
partial (method) remove select set

字段:属性在类的声明中用变量表示,这样的变量称为字段(field)。
字段是在类声明的内部声明的,但是位于类的方法声明体之外。当类的每个对象维护自己的属性副本时,代表属性的字段又称为实例变量。

方法(Method):描述了类实际执行任务的机制,从形式上看,相当于C语言的函数

字段和方法都具有访问权限,主要为代码的安全考虑
通常有 3 种访问权限:private(私有的), public(公共的), protected(保护的)
使用权限:

  • private 修饰的字段或者方法只允许在类的内部使用
  • public 修饰的字段或者方法则没有什么限制,从类的外部可以直接使用
  • protected 修饰的字段和方法可以在派生类中使用

命名空间:namespace中文多翻译为名字空间(或者命名空间)。
名字空间是用来组织和重用代码的编译单元,所谓namespace,是指标识符的各种可见范围。

System(名字空间).Console(类名).WriteLine(方法名)(“hello”)(要输出的函数参数);

在名字的开头使用 using 语句表示引用该名字空间,在代码书写中可以省略名字空间 。namespace 是 C# 的一个关键字,实际上,它只是起到标识作用,把需要的内容放到一起,细化管理,也可以定义自己的命名空间。
在新建C#项目时,会自动地把所有的东西放到一个新的名字空间里,这个名字空间默认的名字就是项目的名字

Main():一个项目可以就是你开发的一个软件,从扩展名来看,应用程序都会编译为一个 .exe 文件,既然是.exe文件,就表明它是可以被执行的。表现在程序中,这些应用程序都有一个主程序入口点,即Main()。
而类库,Windows控件等,则没有这个入口点,所以不能直接执行,而仅提供一些功能,给其他项目调用。这样的程序后缀名为 .dll
Visual Studio除了建立了一个控制台项目之外,该项目同时还属于一个解决方案

现在以下面这段代码为例找找这四种分别是什么:

  • 字段
  • 方法
  • 主函数
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace liti
{
   
    class Program
    {
   
        static void Main(string[] args)  //主函数
        {
   
            MyClass haha = new MyClass();  //创建新的类的实例
            haha.SayHello();  //执行类里面的方法
        }
    }
    class MyClass  //类,MyClass是类名,可以自己命名,需要符合标识符的规定
    {
   
        private int x;  //成员字段,可以存储一个数据
        //因为使用权限是private,所以不可以在主函数里不可访问x
        public void SayHello()  //成员方法,相当于c语言里的函数
        //因为使用权限是public,所以可以在主函数里可以访问SayHello
        {
   
            Console.WriteLine("hello world!");
        }
    }
}
输入和输出

在一行输入一个数据,求两个数的和

  • Console.Read():在一行输入一个字符
  • Console.ReadLine():在一行输入一串字符
  • Console.Write():输出时不换行
  • Console.WriteLine():输出时换行
using System;
namespace liti
{
   
    class Program
    {
   
        static void Main(string[] args) 
        {
   
        	//在一行输入一个数据
            //Console.Read();  //读取一个字符
            string s = Console.ReadLine();  //读取一行字符 
            int x = Convert.ToInt32(s);  //将字符串转换为整数
            s = Console.ReadLine();
            int y = Convert.ToInt32(s);  //必须手动转换
            int z = x + y;  
            //Console.Write(z);  //输出后不换行
            Console.WriteLine(z);  //输出后自动换行
            //z会自动转换为字符输出
        }
    } 
}

在一行输入多个数据,并求和

  • ss1 = s1.Split(’ '):将输入的数据根据空格分解为子串
  • Console.WriteLine(“和是{0}”, sum):带格式输出
using System;
namespace liti
{
   
    class Program
    {
   
        static void Main(string[] args) 
        {
   
            //在一行输入多个数据
            string s1 = Console.ReadLine();  //输入数据,中间用空格隔开
            string[] ss1 = s1.Split(' ');  //Split方法表示按括号内分隔符拆分字符串
            //s1 是一个类,类中有很多方法,比如Split方法
            double[] a = new double[ss1.Length];  //分配新的空间
            double sum = 0;
            for (int i = 0; i < ss1.Length; i++)
            {
   
                a[i] = Convert.ToDouble(ss1[i]);  //将字符串转换为double型
                sum = sum + a[i];  //求和
            }
            Console.WriteLine(sum);
            //带格式输出
            Console.WriteLine("和是{0}", sum);  //大括号里的数必须从0开始
        }
    } 
}

类型转换

类型转换是把数据从一种类型转换为另一种类型。在 C# 中,类型转换有两种形式:

  • 隐式类型转换 这些转换是 C# 默认的以安全方式进行的转换。例如,从小的整数类型转换为大的整数类型,从派生类转换为基类。
  • 显式类型转换 这些转换是通过用户使用预定义的函数显示完成的。显式转换需要强制转换运算符

C# 提供了下列内置的类型转换方法:

序号 方法 描述
1 ToBoolean 如果可能的话,把类型转换为布尔型。
2 ToByte 把类型转换为字节类型。
3 ToChar 如果可能的话,把类型转换为单个 Unicode 字符类型。
4 ToDateTime 把类型(整数或字符串类型)转换为日期-时间结构。
5 ToDecimal 把浮点型或整数类型转换为十进制类型。
6 ToDouble 把类型转换为双精度浮点型。
7 ToInt16 把类型转换为 16 位整数类型。
8 ToInt32 把类型转换为 32 位整数类型。
9 ToInt64 把类型转换为 64 位整数类型。
10 ToSbyte 把类型转换为有符号字节类型。
11 ToSingle 把类型转换为小浮点数类型。
12 ToString 把类型转换为字符串类型。
13 ToType 把类型转换为指定类型。
14 ToUInt16 把类型转换为 16 位无符号整数类型。
15 ToUInt32 把类型转换为 32 位无符号整数类型。
16 ToUInt64 把类型转换为 64 位无符号整数类型。
四, 数据类型

在 C# 中,变量分为以下几种类型:

  • 值类型(Value types)
  • 引用类型(Reference types)
  • 指针类型(Pointer types)

值类型

值类型变量可以直接分配给其一个。它们是从类 System.ValueType 中派生的。值类型直接包含数据。比如 int、char、float,它们分别存储数字、字母和浮点数。当声明一个 int 类型的变量时,系统将会分配内存来存储它的值。

如需得到一个类型或一个变量在特定平台上的准确大小,可以使用 sizeof 方法。表达式 sizeof(type) 产生以字节为单位存储对象或类型的存储尺寸。

引用类型
引用类型不包含存储在变量中的实际数据,但它们包含对变量的引用。
换句话说,它们指向的是一个内存位置。使用多重变量时,引用类型可以指向一个内存位置。如果内存位置的数据是由多重变量之中的一个改变的,其他变量会自动相应这种值的变化。例如,内置的引用类型有:object、dynamic 和 string。

对象类型
对象类型是 C# 通用类型系统(CTS)中所有数据类型基类。 Object 是 System.Object 类的别名。对象类型可以被分配任何其他类型(值类型、引用类型、预定义类型或用户自定义类型)的值。但是,在分配值之前,需要先进行类型转换。

当一个值类型转换为对象类型时,则被称为装箱;另一方面,当一个对象类型转换为值类型时,则被称为拆箱

object obj;
obj = 100; // 这是装箱

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

声明动态类型的语法:

dynamic <variable_name> = value;

例如:

dynamic d = 20;

动态类型与对象类型相似,但是对象类型变量的类型检查是在编译时进行的,而动态类型变量的类型检查是在运行时进行的。

字符串类型
字符串类型允许给变量分配任何字符串值。字符串类型是 System.String 类的别名。它是从对象类型派生的。字符串类型的值可以通过两种形式进行分配:引号和 @ 引号。

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

char* cptr;  //声明指针
int* iptr;

根据代码了解下列知识:

  • 变量的声明
  • 表达式
  • 值变量
  • 引用变量
       int x
  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值