网站攻击做网站的技术哪个简单
web/
2025/9/28 11:35:53/
文章来源:
网站攻击,做网站的技术哪个简单,国外网站怎么上,微信小程序开发公司排行榜c#的lamba表达式
之前已经写过一些关于委托还有事件的文章#xff0c;今天就来介绍一下lambda表达式。 首先定义需要的函数以及委托
{
public delegate void DoNothingDelegate();
public delegate void StudyDelegate(int id, string name);private void DoNothing()
{Cons…c#的lamba表达式
之前已经写过一些关于委托还有事件的文章今天就来介绍一下lambda表达式。 首先定义需要的函数以及委托
{
public delegate void DoNothingDelegate();
public delegate void StudyDelegate(int id, string name);private void DoNothing()
{Console.WriteLine(DoNothing);
}private void Study(int id , string name)
{Console.WriteLine(${id} {name} 学习 .Net高级班 );
}
}在.net farmwork 1.0,会这样写我们的匿名函数
public void Show(){{//.netframework 1.0的写法DoNothingDelegate doNothing new DoNothingDelegate(DoNothing);StudyDelegate study new StudyDelegate(Study);}}在.netframework 2.0,会这样写匿名函数, 增加了一个delegate关键字 {DoNothingDelegate doNothing new DoNothingDelegate (delegate (){Console.WriteLine(DoNothing);});StudyDelegate study new StudyDelegate( delegate (int id, string name){Console.WriteLine(${id} {name} 学习 .Net高级班 );});}在.netframework3.0去掉了delegate关键字了在参数后增加了一个 goes to
{DoNothingDelegate doNothing new DoNothingDelegate(() {Console.WriteLine(DoNothing);});StudyDelegate study new StudyDelegate((int id, string name) {Console.WriteLine(${id} {name} 学习 .Net高级班 );});
}在.netframework3.0后期我们可以省略参数的信息 StudyDelegate study new StudyDelegate((id, name) {Console.WriteLine(${id} {name} 学习 .Net高级班 );});如果匿名方法体中只有一行代码可以省略方法题的大括号
StudyDelegate study new StudyDelegate((id, name) Console.WriteLine(${id} {name} 学习 .Net高级班 ));只有一个参数的时候参数的小括号也可以省略掉。
public delegate void StudyNew(int id);
StudyNew study id Console.WriteLine(${id} 学习 .Net高级班 );如果方法返回值 如果lambda表达式中只有一行代码且有返回值可以省略return,
Funcint retNum () 1;lamba函数的本质是什么
这里使用ilspy进行反编译来看一下匿名方法的实现是怎么样的 本质上来说,其实就是一个方法--匿名方法, 在类里面会生成和lambad 表达式参数和返回值完全匹配的方法.
匿名类
有时候可以需要创建一个临时的类对象保存数据方便使用。 一个普通的类对象
public class Student{public int Id { get; set; }public int ClassId { get; set; }public string Name { get; set; }public int Age { get; set; }public string Description { get; set; }public void Study(){Console.WriteLine(${this.Id} {this.Name} 跟着老师学习 .Net开发);}public void StudyQt(){Console.WriteLine(${this.Id} {this.Name} 跟着老师学习C Qt);}}
当创建一个普通的类对象的时候这样去创建一个类对象。 Student student new Student(){Id 1,ClassId 2,Name 张三,Age 20,Description 这是一个学生};现在尝试最原始的方法去创建一个匿名类
object model new
{Id 1,Name 小楼一夜听春雨,Age 14,Description 魔刀丁鹏
};为什么可以定义一个匿名的对象?
因为C#中所有的对象都继承自Object对象.
当尝试使用.去访问其中的属性就会报错.
C#是强类型语言(编译时决定类型),object是在编译时确定类型因为Object没有Id等属性所以无法通过.去访问其中的变量.
因此可以使用下面的方法去访问我们的匿名对象中的属性. dynamic model1 new{Id 2,Name 天下第一的剑客,Age 18,Description 神剑山庄谢晓峰};Console.WriteLine(model1.Id);Console.WriteLine(model1.Age);Console.WriteLine(model1.Amy); //报错这里使用了dynamic关键字去避开了编译器的检查,会在运行时检查运行时决定类型.这个出现乱取的问题导致程序崩溃.
有什么方法可以正确的取出想访问的属性又可以避免访问不存在的属性那?var关键字 var model2 new{Id 3,Name 天下第二的剑客,Age 16,Description 不会剑法的阿飞};Console.WriteLine(model2.Id);Console.WriteLine(model2.Name);//Console.WriteLine(model2.Aniu); //报错!无法访问不存在的变量var类型就是弱类型的变量.
使用的注意事项?
不能在匿名类里面声明方法,同时在声明匿名类的属性时候就给定匿名类的属性初始值.不能给属性重新赋值.var声明的变量必须初始化必须能推算出类型,也不允许作为方法的参数类型.
使用的建议?
var配合匿名类型使用var偷懒配合复杂类型时使用。在不知道具体什么类型的时候就可以使用var来声明
缺陷
在代码阅读的时候不是很方便。
建议在大家写代码的时候尽量明确类型。
扩展方法
为什么需要扩展方法
扩展:让功能变得更加强大,让不存在功能存在. ---新增逻辑处理已经存在方法正常调用扩展的东西不影响已经存在的方法如果需求变更,需要支持另外的一个新的功能。
接着上面学生的用例我们可以追加一些需求.
Student student1 new Student()
{Id 1,ClassId 2,Name 张三,Age 20,Description 这是一个学生
};student1.Study();
student1.StudyQt();
如果要增加一个需求--学习嵌入式---直接增加方法. 传统的方式对原有的类进行结构上的修改.
期望:既可以增加新的功能历史代码不变.直接增加类在新的类中去完成.
这里就可以使用扩展方法来完成需求. public static class MethodExtension{public static void StudyEmbedded(this Student student){Console.WriteLine(${student.Id} {student.Name} 跟着老师学习嵌入式开发);}}program.cs
student.StudyEmbedded();可以看到做的操作就是:
把类变成静态类把方法的第一个参数this修饰
这样就完成了一个扩展方法.静态方法的调用--可以像实例方法一样去调用.
不用修改原有的任何类中的类可以新增功能;
有哪些场景
有新的需求来的时候--扩展方法--保证历史代码功能要应用第三方的DLL库(提供的功能不完善我们自己需要升级下----dll,不能修改原有的代码)扩展方法封装帮助类库asp.net core 中到处都是扩展方法--框架的设计--最小化设计.提供一个最基本、最最最简单的功能提供给调用方.这种方式在使用的时候如果想要增强功能就可以扩展. 好处: 尽可能简化代码灵活分配需要就扩展什么.按需扩展不会有代码冗余.
这里有个问题我可以给任意类型写扩展方法嘛? 注意:扩展object类型. public static string SubObj(this object str, int len 10){if (str is null){return string.Empty;}if (str.ToString().Length 10){return str.ToString();}else{str ${str.ToString().Substring(0, len)}....;return str.ToString();}}program.cs object o object 类型;o.SubObj();int i 1;i.SubObj();//可以string sr 你好;sr.SubObj();str.SubGeneric();student.SubGeneric(); //隐患总结
扩展的类型具有继承性扩展父类所有子类都拥有这个功能;扩展的功能可能不适用一些具体的类型但是仍然可以调用;可以造成一些类型的功能的污染;----慎用不建议扩展object,也不是很建议大家去泛型扩展.
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/83307.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!