using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Reflection_Example { public interface Ioriginal { //在接口定义中,不允许声明成员上的修饰符。接口的成员总是公共的,不能声明为虚拟或静态。 string MyString { get; set; } int Order { get; } string DisplayMyString(); int FirstOrSeveral(); } //实现接口的派生类中,除了其字段可以试私有的外,别的带有实现性质的类成员必须是非私有的,即不能是private的。 //可以是protected, internal, public的公有的。 public class FirstImpClass1 : Ioriginal { private string str1; private int myInt; //Define constructor //如果把构造函数定义为private的,那么就不能使用new运算符在外部代码中实例化这个类。 //如果把构造函数定义为public的,可以在任何地方用new运算符来实例化它。 //如果把构造函数定义为protected的,只能在他的派生类中new实例化它的对象。 public FirstImpClass1(string str1) { Console.WriteLine("Now, we'll new an object, please input your string: "); str1 = Console.ReadLine(); this.str1 = str1; } //Overload the constructor public FirstImpClass1(int myInt) { Console.WriteLine("Now, we'll new an object using the int value, please input: "); myInt = Convert.ToInt32(Console.ReadLine()); this.myInt = myInt; } //Implementation of each property public string MyString { get { return str1; } set { str1 = value; } } public int Order { get { return myInt; } } //Implement the method declared in the interface public string DisplayMyString() { Console.WriteLine("The processed string is as below:"); Console.WriteLine(this.MyString); return MyString; } public int FirstOrSeveral() { Console.WriteLine("The int value is : {0}", this.Order); return myInt; } } //Another calss inheriting the Original interface //类型定义可以是public或者private的,也只能是这两种。 //这取决于是否希望包含类型的程序集外部访问它。 //类的访问修饰符不能用protected,internal, protect internal修饰 class MyImpleClass2 : Ioriginal { string str = "hello world!"; //实现接口类,必须是公共的,其成员也必须是公共的。如果属性实现定义为string MyString, 而省去了public修饰符,将会产生编译错误。 //string MyString public string MyString { get { return this.str; } set { str = value; } } public int Order { get { return 3; } } public string DisplayMyString() { Console.WriteLine("The processed string is as below:"); Console.WriteLine(this.MyString); return MyString; } public int FirstOrSeveral() { Console.WriteLine("The int value is : {0}", this.Order); return this.Order; } } public class Class1 { static void Main() { //接口的使用,涉及到强类型转化 Ioriginal MyI1 = new FirstImpClass1(5); MyI1.DisplayMyString(); Ioriginal MyI3 = new FirstImpClass1("test"); MyI3.DisplayMyString(); Ioriginal MyI2 = new MyImpleClass2(); MyI2.DisplayMyString(); Console.ReadLine(); } } }