Implementing Multiple Interfaces

akiaz

Well-known member
Joined
Jul 8, 2003
Messages
63
Location
AZ
I have a question regarding implementing multiple interfaces in vb.net versus c#. This code works good in c#:
Code:
interface IDatabaseUser
{
    void LookupPassword();
}
interface ITestUser
{
    void LookupPassword();
}
public class testcode : IDatabaseUser, ITestUser
{
    public void LookupPassword()
    {
        //
    }
    void ITestUser.LookupPassword()
    {
        //
    }
}
but the "equivalent" code (so I think) in vb.net:
Code:
Public Interface IDatabaseUser
    Sub LookupPassword()
End Interface
Public Interface ITestUser
    Sub LookupPassword()
End Interface
Public Class User
    Implements IDatabaseUser, ITestUser
    Public Sub LookupPassword()
        
    End Sub
    Public Sub LookupPassword() Implements ITestUser.LookupPassword
        
    End Sub
gives an error stating that I must implement Sub LookupPassword(), so when I change the method declaration to
Code:
Public Sub LookupPassword() Implements IDatabaseUser.LookupPassword
I still get the same error, but now I also get an error:

LookupPassword cannot implement LookupPassword because there is no matching sub on interface IDatabaseUser

Is there a fundamental difference in implementing multiple interfaces between c# and vb.net or am I doing something wrong here that is simple to correct?
 
Also, in the vb.net code, I get the error:

Method LookupPassword has multiple definitions with identical signatures.

Which I do not get in c#. I thought they have to be the same when specifying the interface that is implemented for the method otherwise this makes no sense.
 
Code:
Public Interface IDatabaseUser

	Sub LookupPassword()

End Interface

Public Interface ITestUser

	Sub LookupPassword()

End Interface

Public Class User

	Implements IDatabaseUser, ITestUser

	Public Sub LookupPassword2() Implements IDatabaseUser.LookupPassword

		

	End Sub

	Public Sub LookupPassword() Implements ITestUser.LookupPassword

		

	End Sub
End Class
 
I see. So when I create a User object and then make a reference to it like this:
Code:
Dim guy As New User
Dim dbguy As IDatabaseUser = guy
I use b.LookupPassword and not b.LookupPassword2. Actually, now Im curious as to why vb.net is this way and c# is not. Is there some other limitation or advantage in doing interfaces like this between languages?
 
oo limitation?

Joe Mamma said:
VB is a dog!
lol :p , well its actually kinda annoying more than anything but I can sort of get around it by naming class members like this instead:
Code:
Public Sub LookupPassword_DatabaseUser Implements IDatabaseUser.LookupPassword
 and
Public Sub LookupPassword_TestUser Implements ITestUser.LookupPassword
but that makes the lines long which is why I prefer the c# method. Doesnt really matter though to me as long as they both work the same. Where I work, our coders use vb.net and/or c# so thats why its important they work the same.

An alternate thing that I found that I do not like is that when an interface inherits from another interface, the implementing class can only have one member that implements the base interface member (sounds like a tongue twister :cool: ). So I cant do something like this:
Code:
Interface IStandardUser
    Sub LookupPassword()
End Interface
Interface IDatabaseUser
    Inherits IStandardUser
End Interface
Interface ITestUser
    Inherits IStandardUser
End Interface
Public Class User
    Implements IDatabaseUser, ITestUser
    Public Sub LookupPassword_DatabaseUser() Implements IDatabaseUser.LookupPassword
        
    End Sub
    Public Sub LookupPassword_TestUser() Implements ITestUser.LookupPassword
        
    End Sub
End Class
Because I get the error:
IStandardUser.LookupPassword cannot be implemented more than once.

So I cannot have a base interface, and the same is true for c#. I wonder if this is a .NET limitation (or design standard) or if this is pretty much standard across other object oriented languages. Or maybe my approach is alltogether wrong ;)
 
Back
Top