限制对方法的访问或为特定对象重写该方法
Posted
技术标签:
【中文标题】限制对方法的访问或为特定对象重写该方法【英文标题】:Restricting Access to a Method or Rewriting that Method for a Specific Object 【发布时间】:2016-03-21 17:33:27 【问题描述】:(在 C# 程序中)我有一个 List<Author> authors
,其中 Author
是我编写的一个类。 Lists
有一个默认的 Add(Object o)
方法,但我需要使其更难访问或专门为我的 authors
对象覆盖它。
到目前为止,我已经找到了关于多态性、扩展方法(如this one)和delegates in combination with dynamic objects 的信息,但我不确定如果不保持简单,我首先要问的内容是否可行并创建一个继承自 List<Author>
的新类(我认为即使 那个 也没有意义,因为我只会使用该类一次)。
请注意,与this scenario 不同,我无权访问List<T>
类,因此我无法将方法设为虚拟或部分方法,或创建隐藏原始方法的溢出。
鉴于这种情况,我如何将现有的Add(Object o)
方法设为私有并用公共方法覆盖它?最好的解决方案是单独的类,还是更复杂的?
【问题讨论】:
【参考方案1】:您想在此实例中使用新的 Add 方法滚动您自己的类
class MyCustomList<T> : List<T>
public new void Add(T item)
//your custom Add code here
// .... now add it..
base.Add(item);
用这样的方式实例化它:
MyCustomList<Author> sam = new MyCustomList<Author>;
希望对您有所帮助。
【讨论】:
谢谢!我想这行得通。我希望有些东西不需要创建新类,但我现在会使用它。【参考方案2】:我认为最好的解决方案是将 List 封装在它自己的类中。最好的选择是编写自己的收藏,并以列表为后盾。然后您可以将您的自定义逻辑添加到 add 方法中。
例子:
public class AuthorCollection : IList<Author>
private IList<Author> backingAuthorList;
public AuthorCollection(IList<Author> backingAuthorList)
if (backingAuthorList == null)
throw new ArgumentNullException("backingAuthorList");
this.backingAuthorList = backingAuthorList;
public void Add(Author item)
// Add your own logic here
backingAuthorList.Add(item);
【讨论】:
以上是关于限制对方法的访问或为特定对象重写该方法的主要内容,如果未能解决你的问题,请参考以下文章