ASP.NET MVC有没有用过?
ViewBag就是一个dynamic类型的变量,你可以用它放入任何属性/值,没有dynamic,而用object,就只能反射了。
最近很热门的SignalR有没有用过?
它的服务器端的代码:Clients就是一个dynamic类型,你在客户端只需要定义了函数原型,不需要把这个函数原型在服务器上再写一次。你可以用Clients.All.任意的函数名(任意个函数/函数参数)就可以调用了。
LINQ有没有用过?有时候我们需要返回动态查询,此时我们没有定义实体类型,怎么接收查询的结果呢?还得靠synamic……
ViewBag就是一个dynamic类型的变量,你可以用它放入任何属性/值,没有dynamic,而用object,就只能反射了。
最近很热门的SignalR有没有用过?
它的服务器端的代码:Clients就是一个dynamic类型,你在客户端只需要定义了函数原型,不需要把这个函数原型在服务器上再写一次。你可以用Clients.All.任意的函数名(任意个函数/函数参数)就可以调用了。
LINQ有没有用过?有时候我们需要返回动态查询,此时我们没有定义实体类型,怎么接收查询的结果呢?还得靠synamic……
解决方案 »
- c# windowsform 发送邮件
- c#提取网页里一个文本框的正则表达式怎么写???
- UpdatePanel与FileUpload的问题
- DataTable导出为Excel,在导出前并做相应的设置
- 求助visual studio 2005(winform)textbox的问题
- Drag and Drop (拖放)?
- 下面的功能用c#如何实现?
- 流传输的问题.up有分
- 怪问题,自己的机子上是正常的,可在测试时提示Formabout_Load事件里“System.NullReferenceException”对象未实例化
- 请问MS DEVELOPMENT ENVIRONMENT是什么啊?
- datagridview 编辑新行的问题
- C#类在windows 2008 R2 64bit无法识别
伪JS代码
class Frog{};//青蛙,我们定义了一个类~,但里面什么都没有定义~
var f=new Frog();//实例化一个变量接下来开始体会js的变态吧~
我觉得青蛙应该可以游泳吧~ 所以
Frog.Protey.Swim=function (){};我觉得有些青蛙有尾巴吧~所以
f.HasTail; // 这个变态了吧~在C#这种强类型语言中~,如果没有在类中定义了~那么实例化成员是不会有的~
但js很随便而C#的dynamic 就是慢慢地向js这种弱类型语言靠近~书没有 你可以搜索
Visual C# 2010 引入了一个新类型 dynamic。 该类型是一种静态类型,但类型为 dynamic 的对象会跳过静态类型检查。 大多数情况下,该对象就像具有类型 object 一样。 在编译时,将假定类型化为 dynamic 的元素支持任何操作。class Frog{};
var f=new Frog();
f.HasTail; // 如果是C# 这里编译的时候是不会通过的~但如果使用dynamic 那么是可以通过的~ 但运行的时候会报错~ js不会报错~ 而且还是可以运行的~是真的 就是你把他当做什么那么他就是什么~
而dynamic 目前只是提供一种语法上的方便而已~
在C#中,我们在编译的时候确定一个类型,比如
class A
{
public int i = 1;
public virtual void foo() { Console.WriteLine("HelloWorld"); }
}
我们实例化一个对象:
A a = new A();
a.i = 2;
a.foo();
可见,对象是类型的实例,类型是对象产生的模板。
在原型范式中,我们不需要类型,我们用对象作为类型:
dynamic A = new ExpendroObject();
A.new = new Func<dynamic>(() =>
{
dynamic obj = ExpendroObject();
obj.i = 1;
obj.foo = new Action(() => {
Console.WriteLine("HelloWorld");
});
return obj;
});
我们可以这么使用:
dynamic a = A.new();
a.i = 2;
a.foo();
在C#中,我们继承是这样的:
class B : A
{
public int j = 1;
public override void foo() { }
};
在原型范式中,我们可以这么做:
dynamic B = new ExpendroObject();
B.new = Func<dynamic>(() =>
{
dynamic obj = A.new();
obj.j = 1;
obj.foo = new Action(() => { });
return obj;
});
这样,我们保留了继承来的i,新增了j,同时重写了foo();
{
Arguments = "1234",
FileName = "notpad.exe"
};
dynamic yy = xx;
Console.WriteLine(yy.Arguments);
Console.WriteLine(yy.FullName);
这个针对yy的第一个输出,在运行时就正确执行力,而第二个就会让程序崩溃。但是加入我们写var xx = new ProcessStartInfo
{
Arguments = "1234",
FileName = "notpad.exe"
};
var zz = new DirectoryInfo("c:");
dynamic yy = xx;
Console.WriteLine(yy.Arguments);
yy = zz;
Console.WriteLine(yy.FullName);这就通过了。实际上如果你真正动脑筋去“设计程序”,多测试正规的程序,你一定感觉能够在编译时就进行检测的强类型语言是多么优美和高效。而不会反过来以为以低级诡异为美的所谓“动态”语言才高效。