2

私はC#を初めて使用するので、優しくしてください;)

DataGridViewクラスから継承するクラスを作成しようとしています。ほとんどの場合、それは単純です...しかし、linqクエリのいずれかを使用してベースコレクション(DataGridViewRowCollectionなど...)にアクセスしようとすると問題が発生します...私が理解していることから...私は' d IEnumerableおよびIEnumeratorインターフェイスを実装する必要があります...しかし、継承されたクラスでは、そのリガードに追加の機能は実際にはありません。だから...私が欲しいのは、継承されたクラスがDataGridViewと同じクエリ機能をすべて提供することを確認することです。

私はこれについてかなり読んだことがあります...しかし、プログラムで....もちろん、「基本クラスからそのようなものを実装したものは何でも...」という正解は見つからないようです。 。

明らかに、基本クラスが明示的なキャストを必要としない場合に、派生クラスのユーザー(つまり私)が明示的なキャストの束を気にする必要がないようにしたいと思います。

最後に...派生クラスで行うことになったものは何でも...クラスを次のように宣言する必要があります:

MyDataGridViewClass:DataGridView、IEnumerable、IEnumerate

または、コードで修正する必要があるものを修正すると、IEnumerable、IEnumerateの部分は暗黙的になりますか?

前もって感謝します。

4

1 に答える 1

1

インターフェースの基本クラスで行う実装は、継承者(子クラス)で使用できます。

interface IFoo
{
   void Foo();
}

class Foo : IFoo
{
   public void Foo() { }
}

class FooBar : Foo
{
}

これはすべて有効です:

FooBar fooBar = new FooBar();
Foo foo = fooBar;
IFoo ifoo = foo;

ifoo.Foo();

Fooメソッドが明示的に宣言されている場合:

class Foo : IFoo
{
   void IFoo.Foo() { }
}

キャストが発生する必要があります。

于 2012-10-29T19:32:22.120 に答える