C#中不同类型的实例化之间的区别

诺比·杜德

我想知道这两个实例化之间的区别

interface ITest
{
    int TotalMarks(int englishMarks, int mathematicsMarks);
}

class TestClass : ITest
{
    public int TotalMarks(int engMarks, int mathMarks)
    {
        return engMarks + mathMarks;
    }
}

class Program
{
    static void Main(string[] args)
    {
        TestClass c = new TestClass();
        Console.Write(c.TotalMarks(10, 20));
        Console.Write("\n");

        ITest c1 = new TestClass();
        Console.Write(c1.TotalMarks(21, 34));

        Console.ReadKey();
    }
}
  • TestClass c = new TestClass();
  • ITest c1 = new TestClass();

    他们都工作,并给出预期的结果。这两个有何不同以及何时使用哪个?

HimBromBeere

区别在于使用接口的第二个接口只能访问特定接口上存在的那些成员,而不是整个类。这使您可以在实际的类上实现一些不同的接口,而用户只能访问特定的“约束器”。

此外,接口驱动的设计在单元测试中非常有用,因为您可以轻松地交换一个类。

假设您还有另一个类也实现了您的接口。如果您在任何上下文中创建的方法都希望您将实际的类用作参数,则现在必须更改该方法的签名,以同时允许第二个类的实例。如果该方法是为接口设计的,则可以将-TestClassAnotherTestClass-instances都传递给该方法,而不必担心它的实际类型。这样就减少了类耦合,因为您不再依赖于实际的类,而只依赖于接口定义的成员。这些成员的实现方式对您使用的代码没有任何意义。

铸造时也要小心。尽管您可以说的每个实例TestClass也都实现了,但ITest并非所有的实例ITest都是type的TestClass因此,以下代码会InvalidCastException在运行时产生一个

ITest t = new TesClass();
AnotherTestClass t2 = (AnotherTestClass) t;

总而言之接口只是说什么是接口的实例可以做,但不是如何它成功完成了,因为这应该是不重要的任何消费代码。继续举例说明:只要知道该方法确实存在并返回应该返回的内容,就Program无需知道TotalMarks其实际实现方式。实现细节对毫无意义Program这就是所谓的losly类耦合。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在C中具有相同大小的两个不同类型之间有什么区别?

来自分类Dev

在C#中反序列化具有不同类型名称的XML元素

来自分类Dev

C#中的对象实例化之间的区别:将对象存储在引用中与直接调用方法

来自分类Dev

如何在字典中存储来自 C# 中不同类的不同类型的方法

来自分类Dev

在C#中将不同类型存储在集合中

来自分类Dev

C#(清单系统)中不同类型的列表

来自分类Dev

Java中参数化实例化和原始类型实例化之间的区别

来自分类Dev

AWS中两种不同类型的VPC链接之间的主要区别

来自分类Dev

AWS中两种不同类型的VPC链接之间的主要区别

来自分类Dev

用不同类型实例化的模板函数

来自分类Dev

具有静态列表的C#基类在实例化类型之间是否有所不同?

来自分类Dev

如何在Python中的不同类之间共享实例变量

来自分类Dev

与c中不同类型的对象堆叠

来自分类Dev

在C中添加不同类型的变量

来自分类Dev

C#-创建不同类型的实例的方法

来自分类Dev

C#-创建不同类型的实例的方法

来自分类Dev

JSON Newtonsoft C# 反序列化不同类型的对象列表

来自分类Dev

根据c#中的类型将不同类型的json列表分组

来自分类Dev

根据c#中的类型将不同类型的json列表分组

来自分类Dev

在Qt中的线程之间交换不同类型的数据

来自分类Dev

Ada中不同类型之间的数组切片

来自分类Dev

不同类 C# 中的多个 TransactionScope

来自分类Dev

如何在C#中的单个对象数组中访问不同类型的类

来自分类Dev

相同类的实例化对象是否添加到内存(C#)中?

来自分类Dev

具有返回不同类型子项的抽象类中的C#抽象方法

来自分类Dev

如何减少C#中不同类型的相似函数的重复代码

来自分类Dev

关于使用Stream类在c#中读取不同类型的文件?

来自分类Dev

在 C# 中,如何使用具有两种不同类型的泛型?

来自分类Dev

在 C# 中寻找不同类型用户输入的数组列表声明的良好实践

Related 相关文章

  1. 1

    在C中具有相同大小的两个不同类型之间有什么区别?

  2. 2

    在C#中反序列化具有不同类型名称的XML元素

  3. 3

    C#中的对象实例化之间的区别:将对象存储在引用中与直接调用方法

  4. 4

    如何在字典中存储来自 C# 中不同类的不同类型的方法

  5. 5

    在C#中将不同类型存储在集合中

  6. 6

    C#(清单系统)中不同类型的列表

  7. 7

    Java中参数化实例化和原始类型实例化之间的区别

  8. 8

    AWS中两种不同类型的VPC链接之间的主要区别

  9. 9

    AWS中两种不同类型的VPC链接之间的主要区别

  10. 10

    用不同类型实例化的模板函数

  11. 11

    具有静态列表的C#基类在实例化类型之间是否有所不同?

  12. 12

    如何在Python中的不同类之间共享实例变量

  13. 13

    与c中不同类型的对象堆叠

  14. 14

    在C中添加不同类型的变量

  15. 15

    C#-创建不同类型的实例的方法

  16. 16

    C#-创建不同类型的实例的方法

  17. 17

    JSON Newtonsoft C# 反序列化不同类型的对象列表

  18. 18

    根据c#中的类型将不同类型的json列表分组

  19. 19

    根据c#中的类型将不同类型的json列表分组

  20. 20

    在Qt中的线程之间交换不同类型的数据

  21. 21

    Ada中不同类型之间的数组切片

  22. 22

    不同类 C# 中的多个 TransactionScope

  23. 23

    如何在C#中的单个对象数组中访问不同类型的类

  24. 24

    相同类的实例化对象是否添加到内存(C#)中?

  25. 25

    具有返回不同类型子项的抽象类中的C#抽象方法

  26. 26

    如何减少C#中不同类型的相似函数的重复代码

  27. 27

    关于使用Stream类在c#中读取不同类型的文件?

  28. 28

    在 C# 中,如何使用具有两种不同类型的泛型?

  29. 29

    在 C# 中寻找不同类型用户输入的数组列表声明的良好实践

热门标签

归档