泛型、接口、基类、继承这些概念在面向对象程序中本来就很抽象,下面结合一个实例来看看它们如何混合使用
首先建立下图所示的项目。项目为Console项目,其中IClass.cs为接口文件,其它为普通cs文件。BaseClass为基类,ClassA和ClassB继承自BaseClass和接口IClass。InvokeClass为调用类,在这个类里面使用泛型和接口调用ClassA和ClassB中的接口方法。Program为启动Console项目的文件。
项目文件代码如下:
IClass.cs
using System; using System.Collections.Generic; using System.Text; namespace GenericTypesAndInterface { public interface IClass { string GetClassName(); } }
BaseClass.cs
using System; using System.Collections.Generic; using System.Text; namespace GenericTypesAndInterface { class BaseClass { public virtual string GetClassName(string className) { return className; } } }
ClassA.cs
using System; using System.Collections.Generic; using System.Text; namespace GenericTypesAndInterface { class ClassA : BaseClass, IClass { #region IClass Members public string GetClassName() { return base.GetClassName("ClassA"); } #endregion } }
ClassB.cs
using System; using System.Collections.Generic; using System.Text; namespace GenericTypesAndInterface { class ClassB :BaseClass, IClass { #region IClass Members public string GetClassName() { return base.GetClassName("ClassB"); } #endregion } }
InvokeClass.cs
using System; using System.Collections.Generic; using System.Text; namespace GenericTypesAndInterface { public class InvokeClass { public string GetClassName<T>(T item)where T:IClass { return item.GetClassName(); } } }
Program.cs
using System; using System.Collections.Generic; using System.Text; namespace GenericTypesAndInterface { class Program { static void Main(string[] args) { InvokeClass invokeClass = new InvokeClass(); Console.WriteLine(invokeClass.GetClassName<ClassA>(new ClassA())); Console.WriteLine(invokeClass.GetClassName<ClassB>(new ClassB())); Console.ReadLine(); } } }