8、掌握C编程基础:从入门到精通

掌握C#编程基础:从入门到精通

1. C#编程语言简介

C#是一种先进的、现代的、多用途的、面向对象的编程语言。它与其他语言如C、C++和Java有一些相似之处,但C#提供了更简单的编程和简化的语法。C#程序包含一个或多个.cs文件,这些文件中包含了数据类型和类的定义。你需要将这些.cs文件编译成可执行代码(即以.dll或.exe结尾的文件)。例如,如果你编译HelloCSharp程序,你将得到一个名为“HelloCSharp.exe”的可执行文件。

为了编写和运行C#程序,你需要两样重要的东西——一个文本编辑器(例如记事本)和.NET框架。文本编辑器将帮助你编写和编辑代码。而.NET框架则会在编译和执行你的程序方面为你提供帮助。

创建C#程序所需的东西

在你能够使用C#编写程序之前,你需要确保你的计算机上安装了.NET框架。如果你正在使用旧版的Windows操作系统,你需要先下载.NET框架。你可以访问这个网站并获取.NET的最新版本。

Text Editors

你应该使用文本编辑器来编写、编辑和保存源代码。你可以使用安装在你的电脑上的任何文本编辑器。如果你不想下载额外的程序,你可以简单地使用“记事本”。

2. 编写并运行你的第一个C#程序

首先,你需要启动“命令提示符”。如果你使用的是Windows 7或Windows 8,可以点击开始按钮并搜索“cmd”。检查搜索结果,寻找名为“命令提示符”的程序。右键点击该程序,然后从菜单中选择“以管理员身份运行”。

接下来,你需要创建一个文件目录来存储生成的程序。输入“md”后跟目录的名称。然后,输入“cd”进入新目录。

flowchart LR
    A[启动命令提示符] --> B(创建文件目录 md C#Programs)
    B --> C(进入新目录 cd C#Programs)
    C --> D(创建 .cs 文件 notepad HelloCSharp.cs)
    D --> E(编写并保存代码)
    E --> F(编译代码 csc HelloCSharp.cs)
    F --> G(运行程序 HelloCSharp.exe)

以下是HelloCSharp程序的代码:

using System;

class HelloCSharp
{
    static void Main()
    {
        Console.WriteLine("Hello, C#!");
    }
}

3. 数据类型与变量

C#支持多种数据类型,包括布尔值、字符、整数、浮点数、十进制数和字符串。这些数据类型可以分为两大类:值类型和引用类型。

值类型

值类型存在于程序的执行栈中,并保存程序员存储的值。值类型类别包括布尔值、字符和整数。这些数据类型分配的内存一旦程序完成代码执行就会变得可用。例如,一旦程序关闭,程序中 Main() 方法内的变量就会被清空。

引用类型

引用类型在程序的栈中存储一个地址(即一个引用)。这个地址指向所需值的位置。引用类型在其声明时分配动态内存。一旦程序不再需要它,它也会释放一些内存。

字面量

字面量是在程序源代码中指定的值。以下是一些常见的字面量:

类型 示例
实数 3.14
整数 100
字符串 “Hello, World!”
字符 ‘A’
布尔值 true, false

操作符

操作符帮助你处理对象和数据类型。C#语言使用特殊字符(例如“.”、“+”、“^”等)作为操作符。此外,C#代码可以接受多达三种不同的操作数。

常见操作符
  • 赋值操作符 ( = ): 用于赋值。
  • 逻辑操作符 : 用于处理布尔值。
  • && (逻辑与)
  • \|\| (逻辑或)
  • ! (逻辑非)
算术操作符
  • + (加法)
  • - (减法)
  • \* (乘法)
  • / (除法)
  • ++ (递增)
  • -- (递减)
class Test
{
    static void Main()
    {
        double d = 100, e = 3;
        Console.WriteLine(d + e);
        Console.WriteLine(d - e);
        Console.WriteLine(d / e);
        Console.WriteLine(d * e);
        Console.WriteLine(++d);
        Console.WriteLine(--e);
    }
}

4. 控制台输入与输出

控制台是一种工具,你可以用它与计算机中可用的程序进行交互。在C#中,用户与程序的交互涉及标准输出(例如屏幕)和/或标准输入(例如键盘敲击)。当这些元素结合起来时,它们被称为输入/输出(I/O)操作。

控制台命令

  • cd name_of_directory : 更改当前活动目录。
  • dir : 查看当前目录下的文件。
  • rmdir name_of_directory : 删除一个目录。
  • mkdir name_of_directory : 创建一个新的目录。
  • type name_of_file : 查看现有文件的内容。

控制台输入

Console.ReadLine 方法为那些想要从控制台读取数据的人提供了简单和方便。当你调用这个方法时,你的程序将会停止并等待用户的输入。然后,用户可以输入一个字符或一个字符串并按下“回车”。按下回车键,用户就告诉程序他们已经输入了所需的输入。

class Test
{
    static void Main()
    {
        Console.WriteLine("What is your first name?");
        string firstName = Console.ReadLine();
        Console.WriteLine("Please enter your last name?");
        string lastName = Console.ReadLine();
        Console.WriteLine("Hi, {0} {1}!", firstName, lastName);
    }
}

控制台输出

Console.WriteLine Console.Write 都可以打印C#语言中的所有数据类型。这意味着你可以使用它们在用户的控制台上显示消息。

Console.WriteLine("I want to learn the C# programming language.");
Console.WriteLine(100);
Console.WriteLine(3.14);

5. 条件语句

条件语句是一个代码块,它允许你根据所赋予的条件执行各种操作。以下是几种常见的条件语句:

If 语句

if (condition)
{
    // 执行的代码
}

If-Else 语句

if (condition)
{
    // 如果条件为真执行的代码
}
else
{
    // 如果条件为假执行的代码
}

Switch-Case 语句

switch (selector)
{
    case first_integer:
        statements;
        break;
    case second_integer:
        statements;
        break;
    default:
        statements;
        break;
}

示例:判断输入的数字是否为偶数

int number = int.Parse(Console.ReadLine());
if (number % 2 == 0)
{
    Console.WriteLine("The number is even.");
}
else
{
    Console.WriteLine("The number is odd.");
}

6. 循环语句

循环语句允许你重复执行某些代码块。C#提供了几种类型的循环语句,包括 while do-while for foreach

While 循环

while (condition)
{
    // 循环体
}

Do-While 循环

do
{
    // 循环体
} while (condition);

For 循环

for (initializer; condition; update)
{
    // 循环体
}

Foreach 循环

foreach (type item in collection)
{
    // 循环体
}

示例:倒计时程序

int timer = 10;
while (timer >= 0)
{
    Console.WriteLine("Time remaining: " + timer);
    timer--;
}

7. 方法

方法是程序的基本单元,可以解决问题、接受用户输入(称为参数),并产生结果。你需要在类内部声明方法,并且不能嵌套方法。

方法声明

static data_type_of_the_result name_of_method(list_of_parameters)

方法实现

方法的主体由你想要执行的命令、表达式和语句组成。因此,主体是任何方法的重要部分。

方法调用

调用方法简单易行:你只需要指出它的名称,加上一对括号,并用分号结束该行。

class Animals
{
    static void Main()
    {
        Console.WriteLine("I love dogs.");
    }
}

在接下来的部分,我们将深入探讨更多高级主题,包括类和对象的使用、异常处理以及面向对象编程的基本概念。通过这些内容,你将进一步提升你的编程技能,成为一名更加全面的C#开发者。

8. 类和对象

类是C#编程中的核心概念之一。类是创建对象的蓝图,它定义了对象的属性和行为。通过类,你可以组织代码,使其更具可读性和可维护性。

类的定义

类的定义包括类名、成员变量和成员方法。以下是一个简单的类定义示例:

class Person
{
    // 成员变量
    public string Name;
    public int Age;

    // 成员方法
    public void SayHello()
    {
        Console.WriteLine("Hello, my name is " + Name);
    }
}

对象的创建

通过类创建对象非常简单。你可以使用 new 关键字来实例化一个类的对象:

Person person = new Person();
person.Name = "Alice";
person.Age = 30;
person.SayHello(); // 输出: Hello, my name is Alice

类的构造函数

构造函数是类的特殊方法,它在创建对象时自动调用。构造函数用于初始化对象的状态。以下是一个带有构造函数的类示例:

class Person
{
    public string Name;
    public int Age;

    // 构造函数
    public Person(string name, int age)
    {
        Name = name;
        Age = age;
    }

    public void SayHello()
    {
        Console.WriteLine("Hello, my name is " + Name);
    }
}

// 创建对象
Person person = new Person("Alice", 30);
person.SayHello(); // 输出: Hello, my name is Alice

9. 异常处理

异常处理是编写健壮代码的关键部分。通过异常处理,你可以捕获并处理程序运行时可能出现的错误,从而提高程序的可靠性。

Try-Catch 语句

try-catch 语句用于捕获和处理异常。 try 块包含可能引发异常的代码, catch 块用于处理异常。

try
{
    // 可能引发异常的代码
    int result = 10 / 0;
}
catch (DivideByZeroException ex)
{
    // 处理异常的代码
    Console.WriteLine("Cannot divide by zero: " + ex.Message);
}

Finally 块

finally 块中的代码无论是否发生异常都会执行。这通常用于清理资源,如关闭文件或数据库连接。

try
{
    // 可能引发异常的代码
    int result = 10 / 0;
}
catch (DivideByZeroException ex)
{
    Console.WriteLine("Cannot divide by zero: " + ex.Message);
}
finally
{
    // 清理资源的代码
    Console.WriteLine("Cleaning up resources...");
}

异常处理的最佳实践

  • 尽量减少 try 块中的代码 :只包含可能引发异常的代码。
  • 使用具体的异常类型 :捕获特定类型的异常,而不是通用的 Exception 类。
  • 记录异常 :使用日志记录工具记录异常信息,便于调试。

10. 面向对象编程

面向对象编程(OOP)是C#编程的核心范式。它通过类和对象来模拟现实世界中的实体和关系。以下是OOP的四大基本原则:

封装

封装是指将数据和操作数据的方法绑定在一起,并隐藏对象的内部实现细节。通过封装,你可以保护数据的安全性和完整性。

class Person
{
    private string name;

    public string Name
    {
        get { return name; }
        set { name = value; }
    }

    public void SayHello()
    {
        Console.WriteLine("Hello, my name is " + name);
    }
}

继承

继承允许一个类从另一个类派生,从而继承其属性和方法。这有助于代码复用和扩展。

class Animal
{
    public virtual void MakeSound()
    {
        Console.WriteLine("Animal makes a sound");
    }
}

class Dog : Animal
{
    public override void MakeSound()
    {
        Console.WriteLine("Dog barks");
    }
}

// 使用继承
Animal animal = new Dog();
animal.MakeSound(); // 输出: Dog barks

多态

多态是指同一个接口可以有不同的实现形式。通过多态,你可以编写更加灵活和可扩展的代码。

class Animal
{
    public virtual void MakeSound()
    {
        Console.WriteLine("Animal makes a sound");
    }
}

class Cat : Animal
{
    public override void MakeSound()
    {
        Console.WriteLine("Cat meows");
    }
}

class Program
{
    static void Main()
    {
        List<Animal> animals = new List<Animal>();
        animals.Add(new Dog());
        animals.Add(new Cat());

        foreach (Animal animal in animals)
        {
            animal.MakeSound();
        }
    }
}

接口

接口定义了一组方法和属性,但不提供实现。类可以通过实现接口来遵守约定。

interface IAnimal
{
    void MakeSound();
}

class Dog : IAnimal
{
    public void MakeSound()
    {
        Console.WriteLine("Dog barks");
    }
}

class Cat : IAnimal
{
    public void MakeSound()
    {
        Console.WriteLine("Cat meows");
    }
}

class Program
{
    static void Main()
    {
        List<IAnimal> animals = new List<IAnimal>();
        animals.Add(new Dog());
        animals.Add(new Cat());

        foreach (IAnimal animal in animals)
        {
            animal.MakeSound();
        }
    }
}

11. 高级主题

属性和索引器

属性提供了访问类中私有字段的安全方式。索引器允许类像数组一样被索引。

class Person
{
    private string name;

    // 属性
    public string Name
    {
        get { return name; }
        set { name = value; }
    }

    // 索引器
    public string this[int index]
    {
        get
        {
            // 返回索引对应的信息
            return "Index: " + index;
        }
    }
}

// 使用属性和索引器
Person person = new Person();
person.Name = "Alice";
Console.WriteLine(person.Name); // 输出: Alice
Console.WriteLine(person[0]);   // 输出: Index: 0

委托和事件

委托是一种类型安全的函数指针。事件是委托的一种特殊应用,用于处理用户界面或其他异步操作。

// 定义委托
public delegate void Notify(string message);

class EventPublisher
{
    // 定义事件
    public event Notify OnNotify;

    public void RaiseEvent(string message)
    {
        if (OnNotify != null)
        {
            OnNotify(message);
        }
    }
}

class EventSubscriber
{
    public void OnNotified(string message)
    {
        Console.WriteLine("Received notification: " + message);
    }
}

class Program
{
    static void Main()
    {
        EventPublisher publisher = new EventPublisher();
        EventSubscriber subscriber = new EventSubscriber();

        // 订阅事件
        publisher.OnNotify += subscriber.OnNotified;

        // 触发事件
        publisher.RaiseEvent("Hello, World!");
    }
}

泛型

泛型允许你编写可以处理多种类型的代码,从而提高代码的复用性和灵活性。

class Box<T>
{
    private T content;

    public Box(T content)
    {
        this.content = content;
    }

    public T Content
    {
        get { return content; }
        set { content = value; }
    }
}

// 使用泛型类
Box<int> intBox = new Box<int>(100);
Console.WriteLine(intBox.Content); // 输出: 100

Box<string> stringBox = new Box<string>("Hello, World!");
Console.WriteLine(stringBox.Content); // 输出: Hello, World!

LINQ 查询

LINQ(Language Integrated Query)允许你使用SQL风格的查询语法来操作集合和数据源。

List<int> numbers = new List<int> { 1, 2, 3, 4, 5 };

// 使用LINQ查询
var evenNumbers = from n in numbers where n % 2 == 0 select n;

foreach (var num in evenNumbers)
{
    Console.WriteLine(num);
}

12. 总结与未来方向

通过以上章节的学习,你已经掌握了C#编程的基础知识和一些高级特性。接下来,你可以继续深入研究以下领域,以进一步提升你的编程技能:

  • 高级类和对象设计 :学习如何设计更复杂和高效的类结构。
  • 并发编程 :探索多线程和异步编程,以提高程序的性能和响应能力。
  • 设计模式 :学习常用的设计模式,如单例模式、工厂模式等,以编写更优雅的代码。
  • Web 开发 :了解ASP.NET框架,开发Web应用程序。
  • 数据库操作 :学习如何使用Entity Framework等ORM工具与数据库进行交互。

提升代码质量的技巧

  • 代码重构 :定期审查和优化代码,以提高可读性和性能。
  • 单元测试 :编写单元测试,确保代码的正确性和稳定性。
  • 代码审查 :与团队成员进行代码审查,互相学习和改进。

代码示例:实现一个简单的计算器

class Calculator
{
    // 加法
    public static double Add(double a, double b)
    {
        return a + b;
    }

    // 减法
    public static double Subtract(double a, double b)
    {
        return a - b;
    }

    // 乘法
    public static double Multiply(double a, double b)
    {
        return a * b;
    }

    // 除法
    public static double Divide(double a, double b)
    {
        if (b == 0)
        {
            throw new DivideByZeroException("Cannot divide by zero");
        }
        return a / b;
    }
}

class Program
{
    static void Main()
    {
        Console.WriteLine("Enter two numbers:");
        double num1 = double.Parse(Console.ReadLine());
        double num2 = double.Parse(Console.ReadLine());

        Console.WriteLine("Choose operation (+, -, *, /):");
        string operation = Console.ReadLine();

        double result = 0;

        switch (operation)
        {
            case "+":
                result = Calculator.Add(num1, num2);
                break;
            case "-":
                result = Calculator.Subtract(num1, num2);
                break;
            case "*":
                result = Calculator.Multiply(num1, num2);
                break;
            case "/":
                try
                {
                    result = Calculator.Divide(num1, num2);
                }
                catch (DivideByZeroException ex)
                {
                    Console.WriteLine(ex.Message);
                    return;
                }
                break;
            default:
                Console.WriteLine("Invalid operation");
                return;
        }

        Console.WriteLine("Result: " + result);
    }
}

表格:常见异常及其处理方法

异常类型 描述 处理方法
DivideByZeroException 除以零 检查除数是否为零
NullReferenceException 访问空对象 确保对象已正确初始化
IndexOutOfRangeException 数组索引超出范围 检查数组索引是否在有效范围内
FormatException 输入格式错误 提供用户友好的输入提示

流程图:C#编程学习路径

flowchart TD
    A[学习C#基础语法] --> B(掌握数据类型和变量)
    B --> C(理解运算符和表达式)
    C --> D(编写控制台程序)
    D --> E(学习条件语句和循环语句)
    E --> F(深入理解方法和函数)
    F --> G(掌握类和对象)
    G --> H(学习异常处理)
    H --> I(探索面向对象编程)
    I --> J(研究高级主题和实用技巧)

通过这些内容的学习,你将能够编写更加复杂和高效的C#程序。希望这些知识能够帮助你在编程道路上不断进步,成为一名出色的C#开发者。继续努力,祝你好运!

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值