


C# Design Pattern-Example Code Sharing for Derived Classes to Implement Non-Virtual Interface Traps
Understand the difference between interface methods and virtual methods
At first glance, there seems to be no difference between implementing an interface and overriding a virtual method. In fact, the difference between implementing an interface and overriding a virtual method is very different. big! ! !
Derived classes cannot override non-virtual members of the interface
The member methods declared in the interface are not virtual methods by default, so Derived classes cannot override the methods that implement the interface in the base class Non-virtual member.
Look at an example.
Define interface ITest:
public interface ITest { void Test(); }
Base class and Derive class that implement the interface
public class Base:ITest { public Base() { Console.WriteLine("This is base constructor"); } //实现ITest接口 public void Test() { Console.WriteLine("This is in base to ITest implement"); } } public class Derive :Base,ITest { public Derive() { Console.WriteLine("This is derived constructor"); } //测试Derive类实现了ITest吗?? public void Test() { Console.WriteLine("This is in Derive to ITest implement"); } }
Call ObjectBase and Derive:
Base b = new Base(); b.Test(); Base d = new Derive();//将d声明为Base对象 d.Test(); Console.ReadLine();
Output results It is:

It can be seen that the behaviors implemented by the Test methods of instances b and d are all located in the base class! ! ! This shows that Derived classes cannot override members (non-virtual methods) that implement interfaces in the base class
However, please see the following call:
Base b = new Base(); b.Test(); Derive d = new Derive(); //将d声明为Derive对象 d.Test(); Console.ReadLine();
The output result is :

Therefore, if you want an object that inherits to call the interface implementation method, you can only declare it as a Derive instance . This does not comply with the principle that variables in Effective C# are declared as base instances! ! !
Derived class method personality, convert base class method into virtual method
To avoid this confusion in usage, if it is true that the derived class implementation method is a personality behavior, then the implementation of the base class needs to be Add the virtual modifier before the interface method!
The code is modified as follows:
public class Base:ITest { public Base() { Console.WriteLine("This is base constructor"); } public virtual void Test() //实现ITest接口的虚方法 { Console.WriteLine("This is in base to ITest implemnt"); } } public class Derive :Base,ITest { public Derive() { Console.WriteLine("This is derived constructor"); } public override void Test() //实现接口ITest的复写方法 { Console.WriteLine("This is in Derive to ITest implemnt"); } }
One implementation, multiple associated objects use
Observing the above code, we found that the interface implemented in the base class, if the derived class also wants to implement it If this interface is used, it inherits the interface implementation of the base class by default, so there is no need to repeatedly write code to implement the interface.
public interface ITest { void Test(); } public class Base:ITest { public Base() { Console.WriteLine("This is base constructor"); } public void Test() { Console.WriteLine("This is in base to ITest implemnt"); } } public class Derive :Base,ITest { public Derive() { Console.WriteLine("This is derived constructor"); } }
Summary:
1. Derived cannot override non-virtual members of the interface;
2. If the derived class method is a personalized method, convert the base class method into a virtual method;
3 . If the base class implements the interface method, the derived class will also explicitly inherit this interface, but there is no need to implement it again! ! !
The above is the detailed content of C# Design Pattern-Example Code Sharing for Derived Classes to Implement Non-Virtual Interface Traps. For more information, please follow other related articles on the PHP Chinese website!

Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

Video Face Swap
Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Article

Hot Tools

Notepad++7.3.1
Easy-to-use and free code editor

SublimeText3 Chinese version
Chinese version, very easy to use

Zend Studio 13.0.1
Powerful PHP integrated development environment

Dreamweaver CS6
Visual web development tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

Hot Topics











Guide to Active Directory with C#. Here we discuss the introduction and how Active Directory works in C# along with the syntax and example.

Guide to Random Number Generator in C#. Here we discuss how Random Number Generator work, concept of pseudo-random and secure numbers.

Guide to C# Data Grid View. Here we discuss the examples of how a data grid view can be loaded and exported from the SQL database or an excel file.

Guide to Factorial in C#. Here we discuss the introduction to factorial in c# along with different examples and code implementation.

The difference between multithreading and asynchronous is that multithreading executes multiple threads at the same time, while asynchronously performs operations without blocking the current thread. Multithreading is used for compute-intensive tasks, while asynchronously is used for user interaction. The advantage of multi-threading is to improve computing performance, while the advantage of asynchronous is to not block UI threads. Choosing multithreading or asynchronous depends on the nature of the task: Computation-intensive tasks use multithreading, tasks that interact with external resources and need to keep UI responsiveness use asynchronous.

Guide to Patterns in C#. Here we discuss the introduction and top 3 types of Patterns in C# along with its examples and code implementation.

Guide to Prime Numbers in C#. Here we discuss the introduction and examples of prime numbers in c# along with code implementation.

There are several ways to modify XML formats: manually editing with a text editor such as Notepad; automatically formatting with online or desktop XML formatting tools such as XMLbeautifier; define conversion rules using XML conversion tools such as XSLT; or parse and operate using programming languages such as Python. Be careful when modifying and back up the original files.
