All Components in .NET inherit from MarshalByRefObject which brings along a lot of baggage with it. This class is used primarily for marshaling data between .NET and COM but was also used for some older remoting technologies introduced in .NET 2.0.
In a nutshell, MarshalByRefObject allows the runtime to insert message sinks into your object effectively intercepting method and property calls.
Generally speaking, don't inherit from or use objects inheriting from Component and or MarshalByRefObject unless you have to.
What is the major use of MarshalByRefObject?