1.索引器
索引器允许类或结构的实例按照与数组相同的方式进行索引。索引器类似于属性,不同之处在于它们的访问器采用参数。它可以像数组那样对对象使用下标。它提供了通过索引方式方便地访问类的数据信息的方法。
要声明类或结构的索引器,使用this关键字。
class SampleCollection<T> { private T[] arr = new T[100]; public T this[int i] { get { return arr[i]; } set { arr[i] = value; } } } class Program { static void Main(string[] args) { //SampleCollection<int> i=new SampleCollection<int>(); //i[0] = 1; // Console.WriteLine(i[0]); SampleCollection<string> s = new SampleCollection<string>(); s[0] = "HELLO"; Console.WriteLine(s[0]); Console.ReadKey(); } }
2.静态构造函数的使用方法
这道题比较有意思,先看下代码及运行的结果:
class Class1 { public static int Count = 0; static Class1() { Count++; } public Class1() { Count++; } } class Program { static void Main(string[] args) { Class1 o1 = new Class1(); Class1 o2 = new Class1(); Console.WriteLine(Class1.Count); Console.ReadKey(); } }
从调试的结果来看,运行到这行代码Class1 o1 = new Class1();调用static Class1() { Count++; }函数,然后会接着调用public Class1() { Count++; },再运行到Class1 o2 = new Class1();这行代码时,就只调用public Class1() { Count++; },(刚开始会认为只执行其中的一个函数,没想到结果会是这样,他们不是重载的关系吗?)
解释:
使用静态函数(静态方法),编译器会在编译程序代码的时候,将静态方法当作全局函数对待。
可以说静态函数(方法)是属于类的;
普通函数(方法)是属于对象的。
3.又一有意思的题目(这样的题目可以看出水平呀。。。)
直接上代码和运行结果了
public class A { public virtual void Fun1(int i) { Console.WriteLine(i); } public void Fun2(A a) { a.Fun1(1); Fun1(5); } } public class B : A { public override void Fun1(int i) { base.Fun1(i+1); } } class Program { static void Main(string[] args) { B b = new B(); A a = new A(); a.Fun2(b); b.Fun2(a); Console.ReadKey(); } }