src/DotNetCommon.Core/Accessors/Accessor.cs
(开头部分) 6KB这里只显示每个文件的开头 60 行。登录后可以解锁完整代码。
namespace DotNetCommon.Accessors
{
using System;
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.Diagnostics;
using System.Reflection;
/// <summary>
/// 用于构建<see cref="ObjectAccessor"/>和<see cref="GenericAccessor{TInstance}"/>实例。
/// <code>
/// 下面的示例用来完整演示一个类属性的读写操作,首先准备要进行反射的类:
/// public class Person
/// {
/// public int Id { get; set; }
/// public string Name { get; set; }
/// }
/// public class Program
/// {
/// static void Main(string[] args)
/// {
/// //创建Person类的属性反射操作对象(操作属性时,忽略大小写)
/// var accessor = Accessor.Build<Person>(true);
/// var person = new Person() { Id = 1, Name = "普通用户"};
/// //输出: 1
/// Console.WriteLine(accessor[person, "Id"]);
/// accessor[person, "name"] = "小明";
/// //输出: "小明"
/// Console.WriteLine(person.Name);
/// Console.ReadLine();
/// }
/// }
/// </code>
/// </summary>
public abstract class Accessor
{
private static ConcurrentDictionary<(Type type, bool ignoreCase, bool includeNonPublic), ObjectAccessor> _objectAccessorCache = new ConcurrentDictionary<(Type type, bool ignoreCase, bool includeNonPublic), ObjectAccessor>();
private static ConcurrentDictionary<(Type type, bool ignoreCase, bool includeNonPublic), ObjectAccessor> _genericAccessorCache = new ConcurrentDictionary<(Type type, bool ignoreCase, bool includeNonPublic), ObjectAccessor>();
/// <summary>
/// 用户创建<see cref="Accessor"/>类型的实例
/// </summary>
/// <param name="type">
/// 要进行反射的模型类型
/// </param>
/// <param name="ignoreCase">
/// 反射模型属性时是否忽略大小写
/// </param>
/// <param name="includeNonPublic">
/// 是否反射模型的非<c>public</c>方法
/// </param>
protected Accessor(IReflect type, bool ignoreCase, bool includeNonPublic)
{
Type = type;
IgnoreCase = ignoreCase;
IncludesNonPublic = includeNonPublic;
Comparer = IgnoreCase ? StringComparer.OrdinalIgnoreCase : StringComparer.Ordinal;
var flags = BindingFlags.Public | BindingFlags.Instance;
if (IncludesNonPublic)
后面还有 93 行代码,解锁后查看完整代码
24 小时内免费解锁 3 个项目,之后 1 积分/个。 规则说明
AI 解读
登录后可用,每次 10 积分,解读结果公开显示在下面。
还没有人解读过这个文件。
