A Developer Journey who codes for fun

Daily Dose Of Code

  • Home
  • Dot.Net Basics
    • .Net Basics
      • CTS
      • CLS
      • CLR
      • Strong Vs Weak Ref
      • .Net Framework
      • What is Manifest
    • Memory Management
      • Garbage Collection 1
      • Garbage Collection 2
      • Circular Reference
  • C Sharp
    • Abstract Class in C#
    • Interfaces in C#
    • Value type by Val and By Ref
    • Var keyword
    • Null Coalescing Operator
    • Buit-in code snippets
  • OOPS
    • Abstraction and Encapsulation
    • Polymorphism
    • Inheritence
    • Aggregation
  • Threading
    • Delegates
      • Calling Delegate using Invoke, BeginInvoke
      • Multicast Delegate
      • Exception Handling in Multicast Delegate
      • Action
      • Predicate
      • Func
    • Synchronization
    • Thread Pool
    • Exception Handling
    • TPL
  • Design Pattern
    • Creational Patterns
      • Singleton Pattern
      • Factory Pattern
      • Abstract Factory Pattern
      • Prototype Pattern
      • Builder Pattern
    • Structural Patterns
      • Adapter Pattern
      • Bridge Pattern
      • Composite Pattern
      • Proxy Pattern
      • Facade Pattern
      • Decorator Pattern
      • Flyweight Pattern
    • Behavioral Patterns
      • Command Pattern
      • Interpreter Pattern
      • Iterator Pattern
      • Mediator Pattern
      • Memento Pattern
      • Observer Pattern
      • State Pattern
      • Strategy Pattern
      • Visitor Pattern
      • Chain Of Responsibility Pattern
      • Template Pattern
  • Data Structures
    • Generic List in C#
    • 2d array to 1d array
    • 3d arrayto 1d array
    • Linked List
      • Singly Linked List in C#
    • Queue
      • Dummy Data 1
    • Stack
      • Dummy Data 2
    • Tree
      • Dummy Data 3
    • Graph
      • Dummy Data 4
  • WCF
    • WCF Service using VS 2015
  • Scripts
    • Chrome Extensions
      • Create a Chrome Extension
      • Facebook autologout script
      • Gmail autologout script

Interfaces in C#

 Unknown     12:14 PM     C#, OOPS     No comments   

Hello Everyone, In this article we will try to understand about interfaces and its use in C#


Interfaces in C# are the empty vocabularies.

What does it mean ? It means it contains only the signature of methods, properties ,events and indexers.

Now the question arises what is the benefit of creating an interface ?
A class that implements interface must implement all the members of interface so basically it creates a responsibility or force implementation to child classes.

How can we create an interface ?

Interfaces are declared using interface keyword. Interface are internal by default.


namespace Interface
{
    public interface IProblem
    {
        void MyMethod();
    }
}

An interface can inherit from one or more interfaces.



public interface IProblem
    {
        void MyMethod();
    }

    public interface IProblem1 : IProblem
    {
        void MyMethod1();
    }

    public class MyClass : IProblem1
    {
        //Member of IProblem1
        public void MyMethod1()
        {
            //Some implementation
        }

        //Member of IProblem
        public void MyMethod()
        {
            //Some implementation
        }
    }

How to Create event member inside Interface ?


public interface IProblem
    {
        void MyMethod();

        event EventHandler Closed;
    }
    public interface IProblem1 : IProblem
    {
        void MyMethod1();
    }

    public class MyClass : IProblem1
    {
        event EventHandler myPrivateEvent1;

        //Member of IProblem1
        public void MyMethod1()
        {
            throw new NotImplementedException();
        }

        //Member of IProblem
        public void MyMethod()
        {
            throw new NotImplementedException();
        }


        public event EventHandler Closed
        {
            add
            {
                myPrivateEvent1 += value;
            }
            remove
            {
                myPrivateEvent1 -= value;
            }
        }

        /// <summary>
        /// Raising the event.
        /// </summary>
        public void OnClosed()
        {
            EventHandler handler = myPrivateEvent1;
            if (handler != null)
            {
                handler(null, new EventArgs());
            }
        }
    }

In C# using interfaces we can achieve multiple inheritance. So it means a class can inherit multiple interfaces. Looks Cool

But What if both of interfaces contains same members - like same method declaration, event declaration. Will it compile ?

Answer is Yes. C# introduces Explicit and Implicit Interface implementations. Above implementations are Implicit implementation and when we explicitly mentioned the name of interface while implementing in a class, It's called Explicit implementation.


Let's see an example -





















In above example I have same method declaration in both of my interface but still I don't see any compile time error. .Net framework internally handling this.

But what if I need to implement different behaviours for both of the methods then how can I achieve this ?

See below example-


public interface IProblemNew
    {
        void MyMethod();
    }

    public interface IProblem2
    {
        void MyMethod();
    }

    public class NewClass : IProblem2, IProblemNew
    {

        void IProblem2.MyMethod()
        {
            
        }

        void IProblemNew.MyMethod()
        {

        }
    }
So If I am creating object of IProblem2 then in case I should see only the metadata of that interface only. See attached example -











In the same way we can use explicit events as well.





Conclusion of the story  -
  • It allows force implementation and creates a responsibility on developer to implement all the members of the interface.
  • Using interface we can achieve multiple inheritance.
  • Interfaces cannot inherit Abstract class.
  • Interface can inherit from one or more base interfaces.
  •  By default interfaces are internal not public.
  •  We cannot use Sealed keyword while defining interface.

Point to remember - There is some confusion over default access modifier of interface.

Default access modifier of Interface is Internal -
In below example one interface is public and on another one I didn't define any access modifier.













Hope you like reading the article. Please share your comments in case of any confusion.
Happy Coding :)
  • Share This:  
  •  Facebook
  •  Twitter
  •  Google+
  •  Stumble
  •  Digg
Email ThisBlogThis!Share to XShare to Facebook
Newer Post Older Post Home

0 comments:

Post a Comment

About The Author

Unknown
View my complete profile

Total Pageviews

Popular Posts

  • Clr - Common Language Runtime
    .Net framework provides a run time environment - CLR. Common language runtime takes the IL code from the compiler( language specific) and p...
  • Auto logout chrome extension for Gmail
    Hello Friends, In the last article we learned to create a sample chrome extension. Here we are going to create auto logout Gmail script as...
  • Predicate delegate in C#
    Hello Everyone, In the article we will talk about Predicate delegate. Predicate is also a delegate which encapsulate a method that takes...
  • .Net Framework overview
    Hello friends : Here i am writing my first article on .Net framework anyways....So the question is What is .Net Framework ? The .Net fram...
  • Nagarro Placement Papers..
    Ques.1 :- Seat Reservation prog for the theatre. Write a function for seat allocation for the movie tickets. Total no of seats available are...
  • Calling the Delegates using Invoke(), BeginInvoke() and DynamicInvoke() ?
    Hello Guys, So in the last article we talked about What is delegate and how can we create a delegate. In this article we will discuss w...
  • What does it mean by disconnected data access architecture of ADO.Net?
    ADO.Net introduces the concept of disconnected data architecture. In traditional data access components, you make a connection to the databa...
  • C code to Check the string has valid identifier or not in.
    #include #include #include char keyword[][10]={"auto","break","case","char","const","...
  • Delegates in C Sharp
    A Delegate is a type variable that holds the reference to a method. Delegates are similar to Pointer to functions in C and C++ When we...
  • Garbage Collection - Automatic memory management
    While thinking of this question few things are coming in my mind ~ How .Net reclaims objects and memory used by an application ? So the ans...

Blog Archive

  • ►  2016 (4)
    • ►  September (2)
      • ►  Sep 03 (2)
    • ►  August (1)
      • ►  Aug 28 (1)
    • ►  April (1)
      • ►  Apr 24 (1)
  • ▼  2015 (12)
    • ▼  September (10)
      • ►  Sep 30 (1)
      • ►  Sep 29 (1)
      • ►  Sep 28 (1)
      • ►  Sep 27 (2)
      • ▼  Sep 26 (3)
        • Calling the Delegates using Invoke(), BeginInvoke(...
        • Delegates in C Sharp
        • Interfaces in C#
      • ►  Sep 20 (1)
      • ►  Sep 19 (1)
    • ►  August (1)
      • ►  Aug 16 (1)
    • ►  March (1)
      • ►  Mar 31 (1)
  • ►  2013 (10)
    • ►  June (1)
      • ►  Jun 16 (1)
    • ►  April (1)
      • ►  Apr 21 (1)
    • ►  February (8)
      • ►  Feb 18 (3)
      • ►  Feb 17 (2)
      • ►  Feb 16 (2)
      • ►  Feb 15 (1)
  • ►  2012 (1)
    • ►  May (1)
      • ►  May 27 (1)
  • ►  2010 (22)
    • ►  October (14)
      • ►  Oct 21 (1)
      • ►  Oct 06 (12)
      • ►  Oct 04 (1)
    • ►  April (2)
      • ►  Apr 22 (1)
      • ►  Apr 16 (1)
    • ►  March (1)
      • ►  Mar 30 (1)
    • ►  January (5)
      • ►  Jan 08 (3)
      • ►  Jan 01 (2)
  • ►  2009 (110)
    • ►  December (8)
      • ►  Dec 18 (2)
      • ►  Dec 05 (1)
      • ►  Dec 04 (5)
    • ►  November (1)
      • ►  Nov 27 (1)
    • ►  October (14)
      • ►  Oct 09 (4)
      • ►  Oct 07 (1)
      • ►  Oct 06 (3)
      • ►  Oct 05 (3)
      • ►  Oct 01 (3)
    • ►  September (17)
      • ►  Sep 30 (1)
      • ►  Sep 29 (1)
      • ►  Sep 28 (1)
      • ►  Sep 25 (1)
      • ►  Sep 24 (1)
      • ►  Sep 17 (2)
      • ►  Sep 15 (3)
      • ►  Sep 11 (2)
      • ►  Sep 09 (3)
      • ►  Sep 08 (2)
    • ►  August (31)
      • ►  Aug 31 (1)
      • ►  Aug 27 (3)
      • ►  Aug 26 (1)
      • ►  Aug 25 (2)
      • ►  Aug 24 (1)
      • ►  Aug 22 (2)
      • ►  Aug 21 (3)
      • ►  Aug 20 (2)
      • ►  Aug 19 (3)
      • ►  Aug 18 (1)
      • ►  Aug 16 (1)
      • ►  Aug 12 (2)
      • ►  Aug 11 (1)
      • ►  Aug 10 (3)
      • ►  Aug 07 (4)
      • ►  Aug 06 (1)
    • ►  July (24)
      • ►  Jul 25 (4)
      • ►  Jul 24 (20)
    • ►  April (15)
      • ►  Apr 10 (3)
      • ►  Apr 07 (9)
      • ►  Apr 06 (3)

Subscribe To

Posts
Atom
Posts
Comments
Atom
Comments
copyright @ TechGiant 2015. Powered by Blogger.

Disclaimer

This is my personal blog and i write articles on .Net, WPF, C#, OOPS, Threading and other .Net technologies. This is not related to any of my employer and organizations. This is the result of my personal interest.

Subscribe To

Posts
Atom
Posts
Comments
Atom
Comments

Followers

Copyright © A Developer Journey who codes for fun | Powered by Blogger
Design by Hardeep Asrani | Blogger Theme by NewBloggerThemes.com