First off, it is helpful when you have questions that you post code that actually compiles. It is difficult to analyze a problem when it is full of missing modifiers and typos; it is hard to know whether the problem is the typo or not.
Once we do the work to fix up your program so that it actually compiles, the compiler emits a warning that tells you that the overloading looks wrong. Since your question is "why is the overloading wrong?" it would probably be a good idea to read the compiler warning that we emitted precisely so that you can analyze this problem.
The problem is that the derived class contains a new method called "name", not an override of the existing method. That's what the warning is trying to tell you.
There are two ways to fix this problem, depending on whether you intended the method to be "new" or "override". If you intended the method to be "override" then make the base implementation virtual and the derived implementation override.
If you intended the method to be "new" and you still want the new method to replace the binding to the interface implementation then use interface reimplementation:
class SpecialContainer: FuzzyContainer, IContainer
{
public new string Name()
{
return base.Name() + " Special Container";
}
}
Notice the "new" and the fact that we have re-stated that this class implements IContainer. This tells the compiler "disregard the bindings to methods of IContainer deduced from the base class and start over."