using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Reflection;
using System.Collections.ObjectModel;
namespace 泛基
{
class Program
{
static void Main(string[] args)
{
MyBase<MyClass> c = new MyClass();
c.say();
Console.ReadLine();
}
}
//父类操作子类(因为父类不知道被谁继承)
//父类的静态属性,可以在子类的Static构造函数中初始化为不同的值
public abstract class MyBase<T> where T :MyBase <T> //被人肉编译器 @vczh 发现少写了<T>
{
public static string DataForThisType {get;set;}
public static T Instance{get;protected set;}
//老赵说的邪恶的部分:让父类操作子类出现了
public static readonly Dictionary<string, MemberInfo> Members
=typeof(T)
.GetMembers()
.ToDictionary(x=>x.Name);
public void say() {
foreach (var kv in Members)
{
Console.WriteLine(kv.Key+"="+kv.Value);
}
}
}
public class MyClass:MyBase<MyClass>
{
static MyClass() //第一次new的时候执行,并且只执行一次
{
Console.WriteLine("static MyClass()");
DataForThisType =string.Format(
"MyClass got {0} members",Members.Count);
Instance = new MyClass();
}
}
}