以下のコードを参照してください。 Visual Studio 2017では、IGetSet.ValueがプロパティIGet.Valueを隠していることを示しています。これが意図されている場合は、new
キーワードを追加する必要があります。私は、クラスに関してプロパティを隠すという概念を理解していますが、インタフェースに関しては、メッセージの意味はわかりません。 new
キーワードを追加するかどうかは、もちろん動作の違いはありません。インターフェイスAがインターフェイスBのプロパティを非表示にする理由
この2つのインターフェイスを積み重ねたいのは、読み取り/書き込みインターフェイスを実装するオブジェクトを、値の取得のみが許可されているメソッドで使用できるようにしたいからです。
は今私の質問は以下のとおりです。
- これは私が欲しいものを達成するための方法ですか?私は、「隠れている」というメッセージが、「あなたはおそらくやりたくないことをここでやっている、違ったやり方で解決しようとしている」というシグナルとして表示されています。
1つのインターフェイスで他のインターフェイスのプロパティを非表示にする方法はありますか?インターフェイスの実装に依存しませんか?だからなぜメッセージ?
public interface IGetSet : IGet { new string Value { get; set; } } public interface IGet { string Value { get; } } public class Tester : IGetSet { public string Value { get; set; } } [Test] public void InterfaceTest() { IGetSet tester = new Tester(); tester.Value = "My Value"; IGet getteronly = tester; var value = getteronly.Value; }
私は、このコンパイルエラーIGet.Value 'と 'ISet.Value 'の間CS0229あいまい'''
public interface ISet
{
string Value { set; }
}
public interface IGet
{
string Value { get; }
}
public interface IGetSet : IGet, ISet
{
}
それらを実装する必要が同じ性質を持っている場合。使用方法によってコンパイルエラーが発生します。それを指摘してくれてありがとう。プロパティがコードで使用されていない場合、インターフェイスは実装されていますが、コードは実際にコンパイルされます。それを指摘してくれてありがとう! –