【问题标题】:.NET Interface signature.NET 接口签名
【发布时间】:2012-07-25 17:05:34
【问题描述】:

你必须在接口中指定变量名有什么原因吗?比如看下面的代码:

 Public Class Class1
        Public Function Test(ByVal j As Integer)

        End Function End Class

    Public Interface int1
        Function Test(ByVal i As Integer)
      End Interface

类中的整数被命名为j,但在接口中被命名为i。为什么界面不会是这样的:

Public Interface int1
            Function Test(Integer)
          End Interface

我意识到这是一个基本问题。我只是觉得很好奇。

【问题讨论】:

  • 我猜它与语义和语法有关。只是猜测。
  • @danish,你有支持这个的链接吗?
  • 如果我有,我不会称之为猜测。 :)

标签: asp.net vb.net


【解决方案1】:

至少,在 2.0 中,如果覆盖与接口签名不匹配,那么您在技术上没有实现它http://msdn.microsoft.com/en-us/library/ms182251(v=vs.80).aspx

我现在不确定。至于为什么?我不知道。你来自另一种语言吗?如果我没记错的话,其他语言的头文件只需要签名中的类型而不需要名称。

Why do we have to name interface method parameters? 的可能欺骗 - 这解释了您可能遇到的其他几个原因。

【讨论】:

  • +1 for SO 链接,我认为 Scott Rippey 的回答有一个非常正当的理由。根据为什么需要它,它是语言规范的一部分
  • 我认为您的第二个链接已经回答了我的问题。我现在一个人在做一个项目。如果我在一个团队中工作,而其他开发人员正在使用我的接口,那么我相信参数名称会对他们有用。
【解决方案2】:

一个原因是如果你有

Public Interface int1
Function Test(Integer,Integer)           
End Interface 

从 int1 变量调用 Test 时,您如何知道哪个整数是什么......

基本上编译器本身并不关心参数名称,但我们几乎总是这样做。

评论之后。

假设您有两个 int1 实现

Imp1.Test(A,B) 和 Imp2.Test(B,A)

你已经完成了

Dim myInt1 as Int1

...

...

myInt1.Test( 

现在你吃饱了不是吗?您必须测试 myInt1 以查看是 imp1 还是 imp2,因此该接口完全是浪费时间...

【讨论】:

  • 谢谢,我不明白你的意思。整数的顺序可以让你区分它们吗?
  • 谢谢,但我还是不明白你想说什么。我意识到实现接口的类需要局部变量名。
  • 一个接口的重点是使用不需要知道它是如何实现的任何事情。如果您有一个包含 int1 的 dll,并且您正在使用它,那么您将如何使用哪个参数而不发现实现它并查看它。这与在任何方法定义中没有参数名称没有什么不同。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-04-01
  • 2015-11-06
  • 1970-01-01
  • 2010-09-05
  • 2019-08-21
  • 2023-03-23
相关资源
最近更新 更多