'Re'implementing Interface Implementations: VB.NET vs. C#
The core difference between the way VB.NET and C# achieve what I'm calling 're'implementation is that in VB.NET you can not implement an interface on a subclass of a superclass that has already implemented it. In C# you can. Instead of implementing the interface a second time, you can override the superclass method that implements the interface method. This probably sounds like a word scramble so let's take a look at the example in code to clarify. We'll start the example using a VB.NET console application. Here's the code so you can take a first look:
Imports System Namespace MyInterfaceTest Public Interface MyInterface Sub MyMethod() End Interface Public Class BaseClass : Implements MyInterface Public Overridable Sub MyMethod() Implements MyInterface.MyMethod Console.WriteLine("BaseClass.MyMethod") End Sub End Class Public Class DerivedClass : Inherits BaseClass Public Overrides Sub MyMethod() Console.WriteLine("DerivedClass.MyMethod") End Sub End Class Class EntryPoint Public Shared Sub Main() Dim iTest As MyInterface iTest = New BaseClass iTest.MyMethod() iTest = New DerivedClass iTest.MyMethod() End Sub End Class End Namespace
Imports System Namespace MyInterfaceTest Public Interface MyInterface Sub MyMethod() End Interface
Public Class BaseClass Implements MyInterface Public Overridable Sub MyMethod() Implements MyInterface.MyMethod Console.WriteLine("BaseClass.MyMethod") End Sub End Class
Public Class DerivedClass Inherits BaseClass Public Overrides Sub MyMethod() Console.WriteLine("DerivedClass.MyMethod") End Sub End Class
Class EntryPoint Public Sub Main() Dim iTest As MyInterface iTest = New BaseClass iTest.MyMethod() iTest = New DerivedClass iTest.MyMethod() End Sub End Class End Namespace
Here is the resulting output:
BaseClass.MyMethod
DerivedClass.MyMethod
As you can see, the interface calls correspond to the desired output.
Now let's take a look as the same code translated into C#.
using System; namespace MyInterfaceTest{ public interface MyInterface{ void MyMethod(); } public class BaseClass : MyInterface{ void MyInterface.MyMethod(){ Console.WriteLine("BaseClass.MyMethod"); } } public class DerivedClass : BaseClass, MyInterface{ void MyInterface.MyMethod(){ Console.WriteLine("DerivedClass.MyMethod"); } } class EntryPoint{ public static void Main(){ MyInterface iTest; iTest = new BaseClass(); iTest.MyMethod(); iTest = new DerivedClass(); iTest.MyMethod(); } } }
The first notable difference is the use of the Overridable keyword in VB.NET
Public Class BaseClass : Implements MyInterface
Public Overridable Sub MyMethod() Implements MyInterface.MyMethod
Console.WriteLine("BaseClass.MyMethod") End Sub End Class
public class BaseClass : MyInterface{
void MyInterface.MyMethod(){
Console.WriteLine("BaseClass.MyMethod"); } }
Public Class DerivedClass : Inherits BaseClass
public class DerivedClass : BaseClass, MyInterface{
Public Overrides Sub MyMethod()
void MyInterface.MyMethod(){
Where to Next?
Wonder where to go next? You can post a comment on this article.
Links in this Document
Doc ID | 337 |
Full URL | https://imar.spaanjaars.com/337/reimplementing-interface-implementations-vbnet-vs-c-sharp |
Short cut | https://imar.spaanjaars.com/337/ |
Written by | Imar Spaanjaars |
Date Posted | 01/05/2005 18:09 |
Date Last Reviewed | 05/24/2006 20:56 |
Comments
Talk Back! Comment on Imar.Spaanjaars.Com
I am interested in what you have to say about this article. Feel free to post any comments, remarks or questions you may have about this article. The Talk Back feature is not meant for technical questions that are not directly related to this article. So, a post like "Hey, can you tell me how I can upload files to a MySQL database in PHP?" is likely to be removed. Also spam and unrealistic job offers will be deleted immediately.
When you post a comment, you have to provide your name and the comment. Your e-mail address is optional and you only need to provide it if you want me to contact you. It will not be displayed along with your comment. I got sick and tired of the comment spam I was receiving, so I have protected this page with a simple calculation exercise. This means that if you want to leave a comment, you'll need to complete the calculation before you hit the Post Comment button.
If you want to object to a comment made by another visitor, be sure to contact me and I'll look into it ASAP. Don't forget to mention the page link, or the Doc ID of the document.