[Gtk-sharp-list] Interface Name Patch
Wed, 26 May 2004 18:39:02 -0700
On Wed, 26 May 2004 17:54:08 -0700, Samuel Kaufman <email@example.com> wrote:>
> No API clarity? It's one of the best things you can do with C# to
> improve API clarity. When declaring what classes/interfaces a new class
> inherits from, it can become an annoying job to figure out if one is
> inheriting from an interface or class. Of course, if a user would never
> need to implement one, then why are they public?
Good point; you could make a case that they should be internal.
However, there are times when you want to be able to use the interface
-- TreeModel is a good example, because ListStore, TreeStore,
NodeStore, and anything derived from ManagedTreeModel can be treated
as a TreeModel, even though they have different implementations of the
> The inconsistency is the annoying bit. Why does ITreeNode have the
> preceding I, for instance?
Becuase ITreeNode is intended to be used directly by managed code.
You cannot take a GInterface such as TreeModel and derive directly
from it; you need to do a lot of munging and p/invoke to tell the
GObject system that you implement an interface, and where the entry
points are. Because C# does not support multiple inheritance, for
every combination of GInterfaces (and a base GObject), you need to
implement a custom abstract C# base class -- ManagedTreeModel is
relatively simple, because it just derives from GObject and implements
a TreeModel. If you wanted to implement, say, both the GtkTreeModel
and GtkFileSystem interfaces, you couldn't use ManagedTreeModel, but
would need a new ManagedTreeModelFileSystem or somesuch.
ITreeNode, on the other hand, is a purely managed interface; there is
no equivalent GInterface. Thus, you are able to (and are expected to)
just use it as any normal managed runtime interface.