将布尔方法添加到现有类C#的最佳方法

我确信这是一个非常简单的任务,但我不完全确定如何将其写入搜索查询。 我得到的最好的是扩展方法,我无法理解它们或得到正确的语法。

我目前正在使用一个简化为GTA V制作mod的程序集。这些程序集包含一个Ped“类型”,其中包含一系列附加到它的方法。

我正在寻找的是能够添加我自己的方法,可以存储bool值作为Ped类的扩展。

例

非常感谢任何帮助,谢谢。

您可以使用ConditionalWeakTable执行此任务:

ConditionalWeakTable对象是一个字典,它将一个由密钥表示的托管对象绑定到其附加属性,该属性由值表示。 对象的键是附加属性的TKey类的各个实例,其值是分配给相应对象的属性值。

例:

 public static class PedExtensions { private static readonly ConditionalWeakTable _props = new ConditionalWeakTable(); public static bool GetMyBool(this Ped ped) { return _props.GetOrCreateValue(ped).MyBool; } public static void SetMyBool(this Ped ped, bool value) { _props.GetOrCreateValue(ped).MyBool = value; } private class PedProperties { public bool MyBool { get; set; } } } 

(当然,如果要存储许多属性,您当然可以将PedProperties作为公共顶级类并直接公开)。

由于表使用弱引用,您不必担心内存泄漏:

ConditionalWeakTable类在管理存储在集合中的键的对象生存期时与其他集合对象不同。 通常,当一个对象存储在一个集合中时,它的生命周期一直持续到它被删除(并且没有对该对象的附加引用)或者直到集合对象本身被销毁为止。 但是,在ConditionalWeakTable类中, 向表中添加键/值对不能确保键将持续存在 ,即使可以直接从表中存储的值到达(例如,如果table包含一个键值A ,值为V1 ,第二个键值B包含值P2 ,其中包含对A )的引用。 相反, ConditionalWeakTable会在表外没有其他对键的引用时自动删除键/值条目。

正确答案是你已经给出的答案,扩展方法。

 public static class PedExtensions { public static bool CheckIfTrue(this Ped ped) { if(ped.something != "this value") { return true; } return false; } } 

方法签名中的“this”是指代码附加到的东西。 所以var myPed = new Ped(); myPed.CheckIfTrue(); 将在扩展中运行代码。