Apologies if these are extremely basic questions, but let’s say I’m using the void Add(T item) function of BlockingCollection:
1) How would I override the Add function, i.e. if I want to add a check at the beginning and then call the base function, is this possible to do, and if so, would the code look something like this?
protected sealed class BlockingCollection<T> : IEnumerable<T>
{
protected override void Add(T item)
{
// do something here
// call base blockingcollection add function, something like return base.Add(item)??
}
}
2) If instead of calling the base function, I wanted to actually modify the Add code, is there a way to get the underlying code for the Add function? Would I use something such as Reflection? If so, is there any way to get the underlying code without writing my own program and using reflection to get the method code (i.e. can I get the underlying method code within the Visual Studio IDE itself without having to write / compile / run code every time I want to get the underlying code of a method?)?
IEnumerable doesn’t have an “Add” method; you’d have to implement your own. ICollection does, however!
Also, because IEnumerable/ICollection are interfaces, not classes, there’s no existing implmementation for you to override. You have to do that part yourself.
Edit for possible additional extra super duper correctness:
If you’re trying to subclass BlockingCollection and you want to do some additional “stuff” before T is added via “Add”, you could do it like this:
So, this extremely simple implementation will add anything you put into your Foo via “Add” twice.