私は、このインターフェイスを作成しました:オブジェクトを入力すると、Interfaceまたはクラスを使用する私に違いがありますか?
public interface IPhrase
{
int CategoryId { get; set; }
string PhraseId { get; set; }
string English { get; set; }
string Romaji { get; set; }
string Kana { get; set; }
string Kanji { get; set; }
}
と、このクラス:ここ
public class Phrase : IPhrase
{
public Phrase()
{
}
public int CategoryId { get; set; }
public string PhraseId { get; set; }
public string English { get; set; }
public string Romaji { get; set; }
public string Kana { get; set; }
public string Kanji { get; set; }
}
このコードは、データやフレーズに型キャスト、それを返します。
var phrases = db2.Query<Phrase>("SELECT * FROM Phrase", ans);
var phrases = db2.Query<IPhrase>("SELECT * FROM Phrase", ans);
私が知りたいのですがどうされますここでIPhrase
を使用している場合に相違点がある場合はPhrase
ですか?また、この例では、私がIPhrase
インターフェースを作成する際にどのような利点がありますか(もしあれば)。それはより読みやすいコードにつながりますか?
あなたはいくつかの点で、ここでのインターフェイスを使用してIPhrase' 'の異なる実装を使用することを決定した場合、これはインターフェースが最初の場所に存在している理由の一つであり、あなたのメンテナンス時間を節約します。具体的なクラスを使用すると、この場合はメリットはありません – slawekwin
利点は、前者が実際にコンパイルされて実行され、後者はコンパイル( 'T:class')または実行時に例外をスローするインタフェースをインスタンス化します。あなたの質問を詳述し、あなたの研究を分かち合いましょう。それは_なぜ "インターフェイスを使用するのですか?" _です。それから、それまでに何度も尋ねられたように検索してみてください。それが他のものなら、あなたの質問を答えることができるように[編集]します。 – CodeCaster
私は、EF/Linq(どんなものでも)が問合せから戻るために具体的な型を作成する必要があるため、インタフェースで動作するかどうかはわかりません。この場合、それは不可能です。また、単純なエンティティ(独自の実際の振る舞いを持たない型)を扱う場合、intefaceには実質上の利点はほとんどありません。 – Igor