1

文字列型のプロパティを実装する型があるとします。

public class Record
{
     public string Value { get; set; }
}

次に、同じ名前のプロパティを定義するインターフェイスがあります。

public interface IIntValued
{
     public int Value { get; set; }
}

次のように明示的なインターフェイスを使用できます。

public class Record : IIntValued
{
     public string Value { get; set; }
     int IIntValued.Value 
     {
          get{ return 0; } set{}
     }
}

ただし、明示的なインターフェイスで文字列「Value」を参照できるようにしたい場合は、できますか? もしそうなら、どのように?私はそれが次のようなものだと想像します:

public class Record : IIntValued
{
     public string Value { get; set; }
     public int IIntValued.Value 
     {
          get
          {
               string value = /*Magic here*/.Value;
               return int.parse(value); 
          } 
          set{}
     }
}

ご覧のとおり、「int 値」「Value」プロパティの式に「文字列値」「Value」プロパティが必要です。それが別の明示的に実装されたインターフェイス メンバーである場合、そのインターフェイスに型キャストしてから使用できますが、暗黙の型メンバーに対してはどのように機能するのでしょうか?

注: この例は少し不自然ですが、うまくいけば言語の問題を示しています。

4

4 に答える 4

3

暗黙的な型メンバーの場合、デフォルトでは解決されないため、単にValueまたはthis.Value問題ないはずIIntValued.Valueです。

于 2009-03-16T15:33:13.357 に答える
2

できますよ!問題は、アクセシビリティ キーワードを違法な場所に配置していたことです。明示的に実装されたメンバーには、アクセシビリティ キーワードを含めることはできません。暗黙的に実装された は、IIntValue なしで記述されます。メンバー名のプレフィックス。

これが機能するサンプルです。

public interface IIntValued
{
  int Value { get; set; }
}

public class Record : IIntValued
{
  public string Value { get; set; }
  int IIntValued.Value
  {
    get
    {
      string value = this.Value;
      return int.Parse(value);
    }
    set { }
  }
}
于 2009-03-16T15:38:03.483 に答える
1

はい、両方のプロパティにアクセスできます。プロパティへのアクセスに使用される変数の型によって異なります。観察:

Record myInstanceAsRecord = myInstance;
IIntValued myInstanceAsIIntValued = myinstance;

string valueAsString = myInstanceAsRecord.Value;
int valueAsInt = myInstanceAsIIntValued.Value;
于 2009-03-16T15:33:12.077 に答える
0

うーん、あらすじを書いた後、答えを知っていることに気づきました。:P それを取得thisしてクラス型に型キャストすると、明示的な実装は含まれません。

string value = ((Record)this).Value; //is the implicit string.

編集:さらに入力した後(レスポンダーに感謝します!)、コンパイラーが自動的に行っていることを手動で行う必要がないことが指摘されました。したがって:

string value = this.Value;

うまくいったでしょう。もちろん、これは がthisインターフェイス変数ではないためです。そのため、暗黙のプロパティがデフォルトで選択されたものになります。

于 2009-03-16T15:36:19.213 に答える