网站首页 > 教程分享 正文
10.1 反射与元数据
反射是 .NET 框架中的一个强大功能,允许程序在运行时检查类型信息并动态调用方法。
示例代码:
csharp
复制
using System;
using System.Reflection;
class Person
{
public string Name { get; set; }
public int Age { get; set; }
public void Introduce()
{
Console.WriteLine("Hello, my name is " + Name + " and I am " + Age + " years old.");
}
}
class Program
{
static void Main(string[] args)
{
Type personType = typeof(Person);
object person = Activator.CreateInstance(personType);
PropertyInfo nameProperty = personType.GetProperty("Name");
nameProperty.SetValue(person, "John");
PropertyInfo ageProperty = personType.GetProperty("Age");
ageProperty.SetValue(person, 25);
MethodInfo introduceMethod = personType.GetMethod("Introduce");
introduceMethod.Invoke(person, null);
}
}
10.2 特性(Attributes)
特性是用于向代码元素添加元数据的声明性标签。C# 提供了多种内置特性,如 [Serializable]、[Obsolete] 等。
示例代码:
csharp
复制
using System;
[Serializable]
class Person
{
public string Name { get; set; }
public int Age { get; set; }
[Obsolete("Use IntroduceV2 instead.")]
public void Introduce()
{
Console.WriteLine("Hello, my name is " + Name + " and I am " + Age + " years old.");
}
public void IntroduceV2()
{
Console.WriteLine("Hi, I'm " + Name + " and I'm " + Age + " years old.");
}
}
class Program
{
static void Main(string[] args)
{
Person person = new Person { Name = "John", Age = 25 };
person.Introduce(); // 警告:方法已过时
person.IntroduceV2();
}
}
10.3 动态类型与动态编程
C# 提供了 dynamic 关键字,允许在编译时跳过类型检查,并在运行时解析类型。
示例代码:
csharp
复制
using System;
class Program
{
static void Main(string[] args)
{
dynamic obj = "Hello, World!";
Console.WriteLine(obj.Length); // 输出 13
obj = 10;
Console.WriteLine(obj + 5); // 输出 15
}
}
10.4 内存管理与垃圾回收
C# 使用垃圾回收器 (GC) 自动管理内存。开发者可以通过 IDisposable 接口和 using 语句来显式释放资源。
示例代码:
csharp
复制
using System;
class Resource : IDisposable
{
public Resource()
{
Console.WriteLine("Resource acquired.");
}
public void Dispose()
{
Console.WriteLine("Resource released.");
}
}
class Program
{
static void Main(string[] args)
{
using (Resource resource = new Resource())
{
Console.WriteLine("Using resource.");
}
}
}
课后练习题
- 简答题:
- 什么是反射?它的主要用途是什么?
- 特性的作用是什么?如何在 C# 中使用特性?
- dynamic 关键字的作用是什么?它与 var 关键字有什么区别?
- 编程题:
- 编写一个程序,使用反射动态调用一个类的方法。
- 创建一个自定义特性 [Author],并将其应用于类和方法。
- 编写一个程序,使用 IDisposable 接口管理资源。
猜你喜欢
- 2025-03-19 火遍全球的“亚洲表情包”你收了吗?
- 2025-03-19 六十三、Java泛型在面向对象编程中的应用技巧与策略
- 2025-03-19 C#从零开始实现一个特性的自动注入功能
- 2025-03-19 深入解析 Java 反射实现机制(java反射机制的作用是什么)
- 2025-03-19 JUC并发—4.wait和notify以及Atomic原理一
- 2025-03-19 直通大厂必考题系列:深入详解Java反射机制与底层实现原理
- 2025-03-19 OneCode 双引擎:携手代码大模型,重塑代码开发科技新范式
- 2025-03-19 Java中那些容易踩坑的场景列举之一
- 2025-03-19 图解java反射机制及常用应用场景(java反射机制详解)
- 2025-03-19 C# 高性能动态获取对象属性值:让你的代码更灵活、更高效
你 发表评论:
欢迎- 最近发表
-
- 有了这份900多页的Android面试指南,你离大厂Offer还远吗?
- K2 Blackpearl 流程平台总体功能介绍:常规流程功能
- 零基础安卓开发起步(一)(安卓开发入门视频)
- 教程:让你的安卓像Windows一样实现程序窗口化运行
- Android事件总线还能怎么玩?(事件总线有什么好处)
- Android 面试被问“谈谈架构”,到底要怎样回答才好?
- Android开发工具Parcel和Serialize
- Android 中Notification的运用(notification widget安卓)
- Android退出所有Activity最优雅的方式
- MT管理器-简单实战-去除启动页(mt管理器怎么去除软件弹窗)
- 标签列表
-
- css导航条 (66)
- sqlinsert (63)
- js提交表单 (60)
- param (62)
- parentelement (65)
- jquery分享 (62)
- check约束 (64)
- curl_init (68)
- sql if语句 (69)
- import (66)
- chmod文件夹 (71)
- clearinterval (71)
- pythonrange (62)
- 数组长度 (61)
- javafx (59)
- 全局消息钩子 (64)
- sort排序 (62)
- jdbc (69)
- php网页源码 (59)
- assert h (69)
- httpclientjar (60)
- postgresql conf (59)
- winform开发 (59)
- mysql数字类型 (71)
- drawimage (61)
本文暂时没有评论,来添加一个吧(●'◡'●)