2012-05-03 4 views
0

このエラーが発生しています。これを修正する方法は、Default1から継承するローダークラスを作成しようとしています。この方法ではC# 'Default1':メンバ名がその囲みタイプと同じであることはできません

namespace MyLevel 
{ 
    class Default1 
    { 
     public interface Default1 
     { 
      IEnumerable<DefaultCore> GetDefaultValues(); 
     } 
    } 
} 

すべてのヘルプは、クラス内のインターフェイスを定義したので、それはクラスのメンバーであり、クラスが同じ名前を持つ2人のメンバーを持つことはできませんも、それはメンバーを持つことができます

答えて

1

を高く評価しましたクラスそのものと同じ名前です。それがエラーメッセージです。

したがって、Default1(クラス)またはDefault1(インターフェイス)のいずれかの名前を変更します。

ほとんどのインターフェイスには大文字のIという接頭辞が付いているため、IDefault1はインターフェイスとして適しています。また、無関係に、なぜあなたはクラス内のインターフェイスを定義していますか?

-1

あなたのコードは評価されていません。

インタフェースは、ビルドのためのI

ない要件で始まり、まだLAW

などの一般的なだけでIDefaultを行くために(通常の)です!

のPrashant :)

+0

私は個人的にこれがダウンボートに値するとは思っていませんが、バッキングや説明がありません。以下は、[Microsoftの命名規則へのリンク](http://msdn.microsoft.com/en-us/library/ms229040.aspx)です。 'インターフェイスの名前に接頭辞をつけて、そのタイプがインターフェイスであることを示す文字Iを付ける.' – Lukazoid

+0

@prashantp答えはあなたの答えが質問の文脈で_help_するのではなく、私は別の問題に対処していると感じている。貧弱な言葉。クリーンアップと私はあなたをupvoteに喜んで:) – payo

3

は、私はあなたがここで定義および/またはインターフェースを実装する方法について混乱していると思います。

あなたには、Default1という名前のクラスがあり、これはDefault1という名前の内部ネストインターフェイスを定義しています。これには3つの問題があります。

  1. これはできません。名前とのあいまいさが生じるため、名前を同じにすることはできません。エラーメッセージはここでかなり明確でした。 (他の人が述べたように、インターフェイスは通常、名前の競合を解決するISomethingと呼ばれます)。

  2. このインターフェイスは奇妙な方法で定義されています;内部にネストされています(あなたが名前を固定と仮定して)、それはあなたがそれを定義したアセンブリの内側のみ表示だし、それがDefault1.IDefaultとして参照する必要があることを意味する。

  3. 何が実際にあなたのインターフェイスを実装していないので、それはどこにも使用されていない。

terface、あなたはクラスを必要としません:

namespace MyLevel 
{ 
    public interface IDefault 
    { 
     IEnumerable<DefaultCore> GetDefaultValues(); 
    } 
} 

あなたのクラスがそのインタフェースを実装する場合:

namespace MyLevel 
{ 
    public class Default1 : IDefault 
    { 
     public IEnumerable<DefaultCore> GetDefaultValues() { } 
    } 
} 
+1

インターフェイスはパブリックであり、クラス(デフォルトでは)が内部であるため、インターフェイスは完全に役に立たないわけではありません。同じアセンブリ内の他のクラスでも使用できますが、クラス内のインターフェイスを定義するのはちょっと変です。 – FishBasketGordo

+0

本当に、何らかの理由で私は*クラス*がデフォルトで 'private'になっていると考え続け、精神的に訂正しなければなりません。あなたのコメントを答えに編集します。 –

+0

ええ、私は自分自身を見なければならなかったが、それについて考えるなら、名前空間レベルのプライベートクラスはあまり意味がありません。そして、デフォルトの公開クラスを持つことは、 C#。 – FishBasketGordo

1

あなたはクラスがインタフェースを継承させたい場合は、それが外にする必要がありますクラス。次に、標準的な命名規則を使用し、インターフェイス名の先頭にI(例えば、IDefaultICloneableIDisposableなど)を付けます。):

namespace MyLevel 
{ 
    public class Default : IDefault 
    { 

    } 

    public interface IDefault 
    { 
     IEnumerable<DefaultCore> GetDefaultValues();    
    } 
} 
+0

ありがとう午前(エラー1の一貫性のないアクセシビリティ:戻り値の型 'System.Collections.Generic.IEnumerable 'はメソッド 'ThisLevel.IDefault.GetDefaultValue()'よりアクセスしにくい – UnknownUser

+0

チェック'DefaultCore'クラスのためのアクセス修飾子であり、それがインタフェースと同じようにアクセス可能であることを確認してください。 –

+0

テストの目的で' IEnumerable 'をコンパイルするかどうかを確認してください。 'また、' System.Collections.Generic'名前空間をインポートしていることを確認してください。 –

関連する問題