c# - 当我键入对象时,使用接口(interface)还是类有什么区别吗?

标签 c#

我创建了这个界面:

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; }
}

这段代码返回数据并将其类型转换为 Phrase:

var phrases = db2.Query<Phrase>("SELECT * FROM Phrase", ans);
var phrases = db2.Query<IPhrase>("SELECT * FROM Phrase", ans);

我想知道的是,我在这里使用IPhrasePhrase 是否有任何区别/优势?另外,我在这个例子中创建一个 IPhrase 接口(interface)有什么好处(如果有的话)。这会导致代码更具可读性吗?

最佳答案

接口(interface)是保证的契约,任何实现接口(interface)的类都将实现接口(interface)中定义的方法和属性。这允许您使用该接口(interface)创建方法、列表等,它们接受任何实现该接口(interface)的类,例如

public interface IExample
{
    int GetInt();
}

public void ProcessInt(IExample value)
{
    var tempInt = value.GetInt();
    // Do processing here
}

这允许将实现接口(interface) IExample 的任何具体类传递给此方法。该方法确保传递的任何具体类都将实现 GetInt 方法。

关于c# - 当我键入对象时,使用接口(interface)还是类有什么区别吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40176007/

相关文章:

c# - PartialView 不渲染在 ajax post 调用上更新的模型

c# - 以编程方式更改 gridview 标题行的高度

c# - Linq to SQL问题

c# - 我无法获取自定义控件的选定项

c# - 有没有一种方法可以通过类的层次结构来分配属性?

c# - 子属性更改时,FreezableCollection 不提供更改通知

c# - 在 MySQL 上使用 SELECT 检索 DataGridView 中的数据

c# - 等待范围属性的初始化

c# - 在 C# 中格式化打印文档

C#等待多个线程完成