扩展方法使您能够向现有类型“添加”方法,而无需创建新的派生类型.重新编译或以其他方式修改原始类型.扩展方法是一种特殊的静态方法,但可以像扩展类型上的实例方法一样进行调用.对于用 C# 和 Visual Basic 编写的客户端代码,调用扩展方法与调用在类型中实际定义的方法之间没有明显的差异. 扩展方法被定义为静态方法,但它们是通过实例方法语法进行调用的.它们的第一个参数指定该方法作用于哪个类型,并且该参数以 this 修饰符为前缀.仅当您使用 using 指令将命名空间显式导入到源代码中之后,扩…
做项目久了,有的时候真的需要静下心来认真的总结一下自己所用到的技术,而不是每天依葫芦画瓢,每天忙忙碌碌,到头来不知道自己忙了个啥,学了什么,自己到底掌握了多少知识.所以我想回顾一下C#的基础知识,把重要的知识总结成点记录下来,方便以后快速阅读. 方法的参数及参数修饰符: 1.(无).如果一个参数没有用参数修饰符标记,则认为它将按值进行传递,这将意味着被调用的方法收到原始数据的一份副本. 2. out:输出参数由被调用的方法赋值,因此按引用传递,如果被调用的方法没有给输出参数赋值,就会出现编译错误…
特点:1.静态类 2.静态方法 3.第一个参数前加this 例如:public static List<T> ToList<T>(this string Json),就是为this对应的string类型扩展类ToList()方法,调用方式 strJson.ToList(); 详细扩展 namespace Demo { public static class Extends { // string类型扩展ToJson方法 public static object ToJson(thi…
namespace Demo { public static class Extends { // string类型扩展ToJson方法 public static object ToJson(this string Json) { return Json == null ? null : JsonConvert.DeserializeObject(Json); } // object类型扩展ToJson方法 public static string ToJson(this object obj…
译文出处:http://www.codeproject.com/Articles/838365/Basic-Csharp-OOP-Concept 相关文档:http://files.cnblogs.com/yplong/ShanuBasicCSharpOOPConceptV1.4.zip 列表: 类 对象 变量 方法/函数 访问修饰符 封装 抽象化 继承 多态 抽象类/方法 虚方法 密封类/方法 静态类/方法 接口 简介: 关于C#面向对象我们能在网上找到很多解释,但在我的文章中我会用一个非常简…
ref ref的定义 ref是reference的缩写,通过引用来传递参数的地址,ref基本上是服务于值类型的 ref的使用 //不使用 ref; void Method(int myRefInt) { myRefInt += 66; //在不使用ref的时候,方法在对参数执行操作后会直接销毁 } int number = 1; Method(number); Console.WriteLine(number); **//输出 : 1;** //使用ref void Method(ref int…
参数修饰符ref,out ,params的区别 C#中有三个关键字-ref,out ,params,可是这三个之间的区别你都明白了吗? 那么我们就来认识一下参数修饰符ref,out ,params吧,还有它们的区别. 第一: params一个可以让方法(函数)的拥有可变参数的关键字. 原则:在方法声明中的 params 关键字之后不允许任何其他参数,并且在方法声明中只允许一个 params 关键字. 示例(拷贝到vs2005中即可用,下面不再说明) public partial class Fo…
Java的interface中,成员变量的默认修饰符为:public static final 所以我们在interface中定义成员变量的时候,可以 1:public static final String name = "张三"; 2:String name = "张三"; 以上两种都可以,老司机一般都是第二种.既然是静态最终的变量,也就意味着在外面访问的时候不能修改这个成员变量的值.所以在接口中定义成员变量的,一般都是常量.不会修改的.如果要进行修改的话,定义…
参数修饰符的作用 参数修饰符 作用 无 如果一个参数没有用参数修饰符标记,则认为它将按值传递(pass by value),这意味着被调用的方法收到原始数据的一份副本 out 输出参数由被调用的方法赋值,因此它按引用传奇(pass by reference).如果被调用的方法没有给输出参数赋值,就会出现编译报错 ref 调用者赋初值,并且可以由被调用的方法可选地重新赋值(因为数据是按引用传递的).如果被调用的方法未能给ref赋值,也不会有编译错误 params 这个参数修饰符允许将一组可变数量额…
in 修饰符记录: 新版C# 新增加的 in 修饰符:保证发送到方法当中的数据不被更改(值类型),当in 修饰符用于引用类型时,可以改变变量的内容,单不能更改变量本身. 个人理解:in 修饰符传递的数据,在方法里就是只读的 ,不能进行任何更改. class Program { static void Main(string[] args) { ; ChangeX(x); } private static void ChangeX(in int x) { x = x + ;//错误 CS8331…
using System; namespace ParamsProgram { class TestParams { public static void Main(string[] args)//static void Main(string[] args) { int m ;//= 10; ]; ; i < arr.Length; i++) { arr[i] = i; } ParamsProgram.TestParams t = new TestParams(); //t.check(5,6…
3 .方法的控制修饰符也分为:可访问控制符和非访问控制符两类. 可访问控制符有 4 种:公共访问控制符: public :私有访问控制符: private :保护访问控制符: protected :私有保护访问控制符: private protected…
先来理解一下理论知识 params可以设置使用长度可变的参数. 使用要求: 1.在一个方法声明的参数中,只能有一个params修饰符,且被修饰的参数之后不能有其他参数(这一点就像“可选参数必须在必选参数之后”的原则一样): 2.传递参数时分三种情况,分别是: a.参数为指定类型的数组: b.参数是用逗号分割的指定类型的参数列表: c.不传递参数. 接下来看下实例代码 先声明一个使用params修饰参数的方法UseParams public void UseParams(params int[]…
ref 关键字通过引用传递参数. 方法定义和调用方法必须显式使用ref关键字: 调用方法时参数必须初始化: 参数中可以声明多个ref修饰的参数. 例: public void UseRef( ref int num) { num = ; } public void Index() { //声明num必须初始化 ; UseRef(ref num); //输出20 Response.Write(num); }…
out 关键字通过引用传递参数. 方法定义和调用方法必须显式使用out关键字: 调用方法时参数不必初始化,方法内必须对其赋值: 参数中可以声明多个out修饰的参数. 例: public void UseOut( out int num) { //必须对参数num赋值 num = ; } public void Index() { //声明num不用必须初始化 int num; UseOut(out num); //输出20 Response.Write(num); } 将上述代码改为: publ…
这篇文章主要介绍了C#类的访问修饰符用法,较为详细的分析了C#类的访问修饰符概念与用法,具有一定的参考借鉴价值,需要的朋友可以参考下 本文详细分析了C#类的访问修饰符用法,分享给大家供大家参考.具体用法分析如下: 默认情况下,类声明为内部的,即只有当前工程中的代码才能访问它.可以用internal访问修饰符关键字显式指定,但这不是必须的,类在定义时默认为此类型的类.但是C# 方法默认访问级别: private. 方法或者属性的修饰符的访问级别如下图: 访问修饰符 意 义 public 访问不受限…
可变参数 不知道可能给方法传递多少个参数时使用这个方法 public void printInfo (String[] args) --可以定义一个数组,在调用这个方法适合赋值给一个数组 public void aaa (String... args) --用java特有的...来传递可变个数的参数,在使用时,与数组的使用方式相同 如果使用数组,在调用方法是要用 a.printInfo(null):没有参数就要定义一个空数组或者null,而第二种是可以直接使用a.aaa(); 如果一个方法有多个…
参数传参的时候一共有四种传递方式: 一.无修饰符传参 也就是说没有传参修饰符,这种情况传过去的是一个副本,本体是不会被改变的 二.out传参修饰符 在传参的参数全面加一个out: public void man() { string a=""; prejiet(out a); } public void man1(out string a) { a=""; Console.WriteLine(a); } //这样做就让man()方法里面的a也变成了10 就介绍两个常…
finalize()方法是Object类的一个方法,在垃圾回收器执行的时候,会调用被回收对象的此方法,可以覆盖此方法提供垃圾收集时的其他资源的回收,例如文件关闭等. 成员访问修饰符: 默认访问:包访问. protected:本包以及子类访问. 因此protected的范围要比默认范围大.…
原文地址:https://docs.djangoproject.com/en/dev/ref/models/instances/#django.db.models.Model.get_FOO_display 关于django中枚举类型转换显示问题,每次设置枚举类型, EXPERIENCE_CHOICES = ( (1, '应届毕业生'), (2, '3年及以下'), ... )education = models.SmallIntegerField(choices=EDUCATION_CHOIC…
整理自MSDN out: out 关键字通过引用传递参数.这与 ref 关键字相似,只不过 ref 要求在传递之前初始化变量.若要使用 out 参数,方法定义和调用方法均必须显式使用 out 关键字.例如: class OutExample { static void Method(out int i) { i = 44; } static void Main() { int value; Method(out value); // value is now 44 } } 尽管作为 out 参数…
params ========================================================================================================================== params 关键字可以指定在参数数目可变处采用参数的方法参数. 在方法声明中的 params 关键字之后不允许任何其他参数,并且在方法声明中只允许一个 params 关键字. 示例// cs_params.csusing System;p…
扩展方法使您能够向现有类型“添加”方法,而无需创建新的派生类型.重新编译或以其他方式修改原始类型.扩展方法是一种特殊的静态方法,但可以像扩展类型上的实例方法一样进行调用.对于用 C# 和 Visual Basic 编写的客户端代码,调用扩展方法与调用在类型中实际定义的方法之间没有明显的差异. static void Main(string[] args) { string str = "".plusString(p => p = p + " girl: lisi.lil…
原始类型的方法 JavaScript 允许我们像使用对象一样使用原始类型(字符串,数字等).JavaScript 还提供了这样的调用方法.我们很快就会学习它们,但是首先我们将了解它的工作原理,毕竟原始类型不是对象(在这里我们会分析地更加清楚). 我们来看看原始类型和对象之间的关键区别. 一个原始值: 是原始类型中的一种值. 在 JavaScript 中有 7 种原始类型:string,number,bigint,boolean,symbol,null 和 undefined. 一个对象: 能够存…
目录 写在前面 系列文章 扩展方法 总结 写在前面 上篇文章介绍了隐式类型,自动属性,初始化器,匿名类的相关概念,及通过反编译的方式查看了编译器帮我们做了那些事.本篇文章将介绍扩展方法的知识点,及如何定义,如何使用的相关内容. 系列文章 Linq之Lambda表达式初步认识 Linq之Lambda进阶 Linq之隐式类型.自动属性.初始化器.匿名类 扩展方法 扩展方法使你能够向现有类型“添加”方法,而无需创建新的派生类型.重新编译或以其他方式修改原始类型. 扩展方法是一种特殊的静态方法,但可以像…
C#基础之方法和参数 接上一篇<C#基础之类型和成员基础以及常量.字段.属性> 实例方法.静态方法 C#中的方法分为两类,一种是属于对象(类型的实例)的,称之为实例方法,另一种是属于类型的,称之为静态方法(用static关键字定义).大家都是做开发的,这两个也没啥好说的. 唯一的建议就是:你的静态方法最好是线程安全的(这点是说起容易做起难啊……). 构造器(构造函数) 构造器是一种特殊的方法,CLR中的构造器分为两种:一种是实例构造器:另一种是类型构造器.和其他方法不同,构造器不能被继承,所以…
  系列文章目录地址: .NET面试题解析(00)-开篇来谈谈面试 & 系列文章索引 做技术是清苦的.一个人,一台机器,相对无言,代码纷飞,bug无情.须梦里挑灯,冥思苦想,肝血暗耗,板凳坐穿.世界繁华竞逐,而你独钓寒江,看尽千山暮雪,听彻寒更雨歇.——来自<技术人的慰藉> 常见面试题目: 1. 所有类型都继承System.Object吗? 2. 解释virtual.sealed.override和abstract的区别 3. 接口和类有什么异同? 4. 抽象类和接口有什么区别?使用时…
对于一些现成的类,如果我们想添加一些新的方法来完善功能,但是不想改变已有的封装,也不想使用派生类,那么该怎么办呢?这里我们可以使用扩展方法. 一见钟情--初识扩展 扩展方法使您能够向现有类型“添加”方法,而无需创建新的派生类型.重新编译或以其他方式修改原始类型. 我们首先来看个例子,有个直观的认识.一个现有的类User: public class User  {      string _name;      public User(string Name)      {          _n…
前言 这一章算是看这本书最大的收获了, Lambda表达式让人用着屡试不爽, C#3.0可谓颠覆了我们的代码编写风格. 因为Lambda所需篇幅挺大, 所以先总结C#3.0智能编译器给我们带来的诸多好处, 下一遍会单独介绍Lambda表达式. 这篇主要包括的内容有: 自动属性,隐式类型,对象集合初始化,匿名类型,扩展方法. 下面一起来看下C#3.0 所带来的变化吧. 1,自动实现的属性在C#3.0之前, 定义属性时一般会像下面这样去编写代码: class Person { //定义私有字段 pr…