locked
Access methods from interfaces RRS feed

  • Question

  • I have project "X" in  C# using .Net framework 2.0 ,I am Adding the assembly created to GAC using utility gacutil and registering it using regasm while doing this I exporting it into a tlb so that i can expose it into a C++ , that works fine.

    Now I have added reference of this assembly(X.dll) in another C# project "Y" which uses .Net framework 3.5.Here I can see the namespace and interfaces and classes but whiel trying to access methods declared within interfaces list remains empty.

    What I am missing?

    Monday, June 6, 2011 7:36 AM

Answers

  • How to: Explicitly Implement Interface Members

    This example declares an interface, IDimensions, and a class, Box, which explicitly implements the interface members getLength and getWidth. The members are accessed through the interface instance dimensions.

    Example

    C#  CopyCode imageCopy Code
    interface IDimensions
    {
      float getLength();
      float getWidth();
    }
    
    class Box : IDimensions
    {
      float lengthInches;
      float widthInches;
    
      Box(float length, float width)
      {
        lengthInches = length;
        widthInches = width;
      }
      // Explicit interface member implementation: 
      float IDimensions.getLength()
      {
        return lengthInches;
      }
      // Explicit interface member implementation:
      float IDimensions.getWidth()
      {
        return widthInches;
      }
    
      static void Main()
      {
        // Declare a class instance box1:
        Box box1 = new Box(30.0f, 20.0f);
    
        // Declare an interface instance dimensions:
        IDimensions dimensions = (IDimensions)box1;
    
        // The following commented lines would produce compilation 
        // errors because they try to access an explicitly implemented
        // interface member from a class instance:          
        //System.Console.WriteLine("Length: {0}", box1.getlength());
        //System.Console.WriteLine("Width: {0}", box1.getwidth());
    
        // Print out the dimensions of the box by calling the methods 
        // from an instance of the interface:
        System.Console.WriteLine("Length: {0}", dimensions.getLength());
        System.Console.WriteLine("Width: {0}", dimensions.getWidth());
      }
    }
    

    Output

     
    Length: 30
    Width: 20

    Robust Programming

    • Notice that the following lines, in the Main method, are commented out because they would produce compilation errors. An interface member that is explicitly implemented cannot be accessed from a class instance:

      C#  CopyCode imageCopy Code
      //System.Console.WriteLine("Length: {0}", box1.getlength());
      //System.Console.WriteLine("Width: {0}", box1.getwidth());
      
    • Notice also that the following lines, in the Main method, successfully print out the dimensions of the box because the methods are being called from an instance of the interface:

      C#  CopyCode imageCopy Code
      System.Console.WriteLine("Length: {0}", dimensions.getLength());
      System.Console.WriteLine("Width: {0}", dimensions.getWidth());
      

     

    Regards,

    Narendran Ponpandiyan

    • Marked as answer by Rahul_M Monday, June 6, 2011 10:16 AM
    Monday, June 6, 2011 9:52 AM