C#高级教程

时间:2024-12-02 08:06:27

以下是按照索引和目录形式整理的C#高级特性注释版示例:

目录

  1. C# 特性(Attribute)
  2. C# 反射(Reflection)
  3. C# 属性(Property)
  4. C# 索引器(Indexer)
  5. C# 委托(Delegate)
  6. C# 事件(Event)
  7. C# 集合(Collection)
  8. C# 泛型(Generic)
  9. C# 匿名方法
  10. C# 不安全代码
  11. C# 多线程

1. C# 特性(Attribute)

// 定义一个自定义特性
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, Inherited = false, AllowMultiple = true)]
public class MyCustomAttribute : Attribute
{
    public string Name { get; set; }

    public MyCustomAttribute(string name)
    {
        Name = name;
    }
}

// 应用特性
[MyCustomAttribute("Hello")]
class Program
{
    static void Main(string[] args)
    {
        // 反射获取特性信息
        var attributes = typeof(Program).GetCustomAttributes(false);
        foreach (var attribute in attributes)
        {
            var customAttribute = (MyCustomAttribute)attribute;
            Console.WriteLine($"Attribute Name: {customAttribute.Name}");
        }
    }
}

2. C# 反射(Reflection)

using System;
using System.Reflection;

class ReflectionExample
{
    public void Display()
    {
        Console.WriteLine("Reflection Example");
    }

    static void Main(string[] args)
    {
        // 获取类型信息
        Type type = typeof(ReflectionExample);
        // 创建类型实例
        object obj = Activator.CreateInstance(type);
        // 获取方法信息
        MethodInfo methodInfo = type.GetMethod("Display");
        // 调用方法
        methodInfo.Invoke(obj, null);
    }
}

3. C# 属性(Property)

class PropertyExample
{
    // 私有字段
    private string _name;
    
    // 公共属性
    public string Name
    {
        get { return _name; }
        set { _name = value; }
    }

    static void Main(string[] args)
    {
        var obj = new PropertyExample();
        // 使用属性
        obj.Name = "Kimi";
        Console.WriteLine(obj.Name);
    }
}

4. C# 索引器(Indexer)

class IndexerExample
{
    private int[] _array = new int[5];

    public int this[int index]
    {
        get { return _array[index]; }
        set { _array[index] = value; }
    }

    static void Main(string[] args)
    {
        var obj = new IndexerExample();
        // 使用索引器
        obj[0] = 10;
        Console.WriteLine(obj[0]);
    }
}

5. C# 委托(Delegate)

using System;

class DelegateExample
{
    // 定义委托
    public delegate void DisplayDelegate(string message);

    // 方法
    public void Display(string message)
    {
        Console.WriteLine(message);
    }

    static void Main(string[] args)
    {
        var obj = new DelegateExample();
        // 创建委托实例
        DelegateExample.DisplayDelegate del = obj.Display;
        
        // 委托调用方法
        del("Hello, Delegate!");
    }
}

6. C# 事件(Event)

using System;

class EventExample
{
    // 定义事件
    public event EventHandler OnEventOccurred;

    // 引发事件的方法
    protected virtual void OnEvent()
    {
        OnEventOccurred?.Invoke(this, EventArgs.Empty);
    }

    static void Main(string[] args)
    {
        var obj = new EventExample();
        // 订阅事件
        obj.OnEventOccurred += (sender, e) =>
        {
            Console.WriteLine("Event occurred!");
        };

        // 引发事件
        obj.OnEvent();
    }
}

7. C# 集合(Collection)

using System;
using System.Collections.Generic;

class CollectionExample
{
    static void Main(string[] args)
    {
        // 创建集合
        List<int> list = new List<int> { 1, 2, 3, 4, 5 };

        // 添加元素
        list.Add(6);

        // 遍历集合
        foreach (var item in list)
        {
            Console.WriteLine(item);
        }
    }
}

8. C# 泛型(Generic)

using System;
using System.Collections.Generic;

class GenericExample<T>
{
    private T _value;

    public T Value
    {
        get { return _value; }
        set { _value = value; }
    }

    static void Main(string[] args)
    {
        var genericObj = new GenericExample<int>();
        // 设置值
        genericObj.Value = 10;
        // 获取值
        Console.WriteLine(genericObj.Value);
    }
}

9. C# 匿名方法

using System;

class AnonymousMethodExample
{
    static void Main(string[] args)
    {
        // 委托
        Action<string> action = delegate(string message) { Console.WriteLine(message); };

        // 调用委托
        action("Hello, Anonymous Method!");
    }
}

10. C# 不安全代码

using System;

class UnsafeCodeExample
{
    static void Main()
    {
        // 不安全代码块
        unsafe
        {
            int number = 0;
            int* p = &number;

            // 修改指针指向的值
            *p = 1234;

            Console.WriteLine(number);
        }
    }
}

11. C# 多线程

using System;
using System.Threading;

class ThreadExample
{
    static void ThreadMethod()
    {
        for (int i = 0; i < 10; i++)
        {
            Console.WriteLine("Thread: " + i);
            Thread.Sleep(1000);
        }
    }

    static void Main(string[] args)
    {
        // 创建线程
        Thread thread = new Thread(new ThreadStart(ThreadMethod));
        // 启动线程
        thread.Start();

        for (int i = 0; i < 5; i++)
        {
            Console.WriteLine("Main Thread: " + i);
            Thread.Sleep(500);
        }

        thread.Join(); // 等待线程结束
    }
}

这个索引和目录形式的整理提供了C#高级特性的基本用法和详细注释,帮助您理解每个特性的工作原理和应用场景。希望这些示例对您有所帮助!