本帖最后由 hetengfei_ 于 2012-01-16 20:06:37 编辑

解决方案 »

  1.   

    对象随时创建可以,大部分都可以用:System.Activator.CreateInstance 余下的如:数组可以Array.CreateInstance ,委托 Delegate.CreateDelegate,泛型:MakeGenericType在C#中删除对象,只需解除引用=null,时间到了自然会被GC,由于C#的语法以及对对象的管理是“强硬”的,而不似js的“宽泛”,因为CLR在设计的时候是安全优先,避免对象创建之后被无故删除,当然你可以将对象创建在一个AppDomain中卸载整个AppDomain中。
      

  2.   

    .net 4.0 有DLR支持部分动态。比如:dynamic 关键字, ExpendoObject 对象等。
    http://msdn.microsoft.com/zh-cn/library/system.dynamic.expandoobject.aspx
    class Program
    {
        static void Main(string[] args)
        {
            dynamic employee, manager;        employee = new ExpandoObject();
            employee.Name = "John Smith";
            employee.Age = 33;        manager = new ExpandoObject();
            manager.Name = "Allison Brown";
            manager.Age = 42;
            manager.TeamSize = 10;        WritePerson(manager);
            WritePerson(employee);
        }
        private static void WritePerson(dynamic person)
        {
            Console.WriteLine("{0} is {1} years old.",
                              person.Name, person.Age);
            // The following statement causes an exception
            // if you pass the employee object.
            // Console.WriteLine("Manages {0} people", person.TeamSize);
        }
    }
    // This code example produces the following output:
    // John Smith is 33 years old.
    // Allison Brown is 42 years old.
      

  3.   

    当然你可以:
    var People=new {Name="me",Year=1988};
    var Student=new {Name="菜鸟me",Course="数学",Score=99};
     如此而已...
    至于删除还真不知道..你可以自己搞个集合,创建对象使用删除...随意 .javascript是解释型语言,我个人认为啊,比如继承方面是采用property原型扩展,要什么直接在一个对象上加就是,相当随意;而不是像C#那样所有的对象都是继承自Object,在对象的定义操作上都时刻以安全为主,需要经过C#编译器,JIT编译器,运行时的层层检验与核实.
      

  4.   

    上面的代码可以这么用: var Student = new { Name = "菜鸟me", Course = "数学", Score = 99 };
    //Name:菜鸟me Course:数学,Score:99
    Console.WriteLine("Name:{0} Course:{1},Score:{2}", Student.Name, Student.Course, Student.Score);
      

  5.   

    刚我想了下你可以这样给一个任意对象添加方法,用委托:Func<String, String> action = delegate(string _) { return _.ToUpper(); };
    var Student = new { Name = "菜鸟me", Course = "数学", Score = 99, Method = action };
    //Name:菜鸟me Course:数学,Score:99,MethodExecute:CAINIAOME
    Console.WriteLine("Name:{0} Course:{1},Score:{2},MethodExecute:{3}", Student.Name, Student.Course, Student.Score, Student.Method("cainiaome"));
      

  6.   

    我想纠正下这个哥哥哦,你的代码和动态完全不搭界哦。var只是让编译器做类型推定,而匿名对象的名字在编译阶段就确定下来了哦。喵~2楼方哥哥的回答完全正确哦~
      

  7.   

    呵呵!主要是题目和问题还是不一致,我侧重问题了:随时创建一个对象,这属于编译时动态吧。
    它的主要是NET4.0,我目前4.0主要是拿来测试,很多人还没用4.0所以想从低于4.0版本尝试下。
      

  8.   

    #2楼 fangxinggood  的代码:
      还是第一次见到,原来C# 还可以这样来写。
    # 6 7 楼 xx_mm 的写法:
       我想了一下,试着写,不过还是写不出来。
    以前我的想法:
      把 属性,都压进字典里去的。
    如下写法:----每来一个对象!add 一次!删就用remove,
    Hashtable table = new Hashtable();
    table.Add("key","value");
    对于方法, xx_mm 说用 委托。 貌似 委托这个东东,在声明时,它的返回参数都已经确定了,
      真的不知如何构思。
    还望 大家 能 细详 地说一说。
      

  9.   

    其实我到发觉我写的跟js反而好像,呵呵,当然形式很像,本质上有区别:Func<String, String> action = delegate(string _) { return _.ToUpper(); };
    var Student = new { Name = "菜鸟me", Course = "数学", Score = 99, Method = action };
    //Name:菜鸟me Course:数学,Score:99,MethodExecute:CAINIAOME
    Console.WriteLine("Name:{0} Course:{1},Score:{2},MethodExecute:{3}", Student.Name, Student.Course, Student.Score, Student.Method("cainiaome"));
     var fun = function(_) { return _.toString().toUpperCase(); };
     var Student = { Name: "菜鸟me",Course: "数学",Score: 99,Method: fun };
    ////Name:菜鸟me Course:数学,Score:99,MethodExecute:CAINIAOME
     document.write("Name:" + Student.Name + " Course:" + Student.Course + ",Score:" + Student.Score + ",Method:" + Student.Method("cainiaome"));
      

  10.   

    ExpendoObject 实际就是个字典 
      

  11.   

    这个也是字典? !
    那么C# 有个种字典?  
    Hashtable  ExpendoObject 除外。
      

  12.   

    Dictionary<string,object> item=new Dictionary<string,object>();
    属性:item.add("name",value);
    无返回值方法:item.add("name",new Action(……));
    有返回值方法:item.add("name",new Func<returnValue>(……));
    基本跟javascript一个思路。
      

  13.   

    Function.method('inherits',function(Parent){this.prototype=new Parent();return this;});是不支持method么?