C#高级教程

以下是按照索引和目录形式整理的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)

csharp 复制代码
// 定义一个自定义特性
[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)

csharp 复制代码
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)

csharp 复制代码
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)

csharp 复制代码
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)

csharp 复制代码
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)

csharp 复制代码
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)

csharp 复制代码
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)

csharp 复制代码
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# 匿名方法

csharp 复制代码
using System;

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

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

10. C# 不安全代码

csharp 复制代码
using System;

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

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

            Console.WriteLine(number);
        }
    }
}

11. C# 多线程

csharp 复制代码
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#高级特性的基本用法和详细注释,帮助您理解每个特性的工作原理和应用场景。希望这些示例对您有所帮助!

相关推荐
高山我梦口香糖1 小时前
[react]searchParams转普通对象
开发语言·前端·javascript
m0_748235241 小时前
前端实现获取后端返回的文件流并下载
前端·状态模式
woshiabc1111 小时前
windows安装Elasticsearch及增删改查操作
大数据·elasticsearch·搜索引擎
m0_748240252 小时前
前端如何检测用户登录状态是否过期
前端
black^sugar2 小时前
纯前端实现更新检测
开发语言·前端·javascript
寻找沙漠的人2 小时前
前端知识补充—CSS
前端·css
GISer_Jing3 小时前
2025前端面试热门题目——计算机网络篇
前端·计算机网络·面试
m0_748245523 小时前
吉利前端、AI面试
前端·面试·职场和发展
理想不理想v3 小时前
webpack最基础的配置
前端·webpack·node.js