扩展方法
来源:互联网 发布:搭建网络电视台 编辑:程序博客网 时间:2024/05/16 07:41
用类和结构说明值传递和引用传递
由于结构是 值类型,那么,当您对方法的 使用结构值 ,方法受到并对结构参数的副本。 方法无法访问原始结构中调用方法并不能将其更改任何方式。 该方法可以仅更改副本。
类的实例是 引用类型,而不是值类型。 当对方法的 引用类型通过值 ,方法进行引用的复制到类实例。 即方法受到实例,而不是复制实例的地址的副本。 在调用方法的类实例都有一个地址,在调用方法的参数的地址的副本,因此,两个地址是否引用同一对象。 由于该参数包含该地址的副本,调用方法不能更改类实例的地址在调用方法的。 但是,调用方法可以使用该地址访问原始地址和该副本引用的类成员。 如果调用方法将类成员,在调用方法的原始类的实例也会发生更改。
public class test : MonoBehaviour { // Use this for initialization void Start () { TheClass c = new TheClass(); c.name="class"; TheStruct s ; s.name = "struct"; ChangeName.ChangeClassName(c); ChangeName.ChangeStructName(s); Debug.Log("After the Change"+c.name); Debug.Log("After the Change" + s.name); } // Update is called once per frame void Update () { } class TheClass { public string name; } struct TheStruct { public string name; } class ChangeName { public static void ChangeClassName(TheClass c) { c.name = "ChangeClass"; } public static void ChangeStructName(TheStruct s) { s.name = "ChangeStruct"; } }}
Var类型
在很多情况下,var 是可选的,它只是提供了语法上的便利。 但是,在使用匿名类型初始化变量时,如果需要在以后访问对象的属性,则必须将该变量声明为 var。 这在 LINQ 查询表达式中很常见。从源代码的角度来说,匿名类型没有名称。 因此,如果已使用 var 初始化查询变量,则只有一种方法可以访问返回的对象序列中的属性,那就是使用 var 作为 foreach 语句中的迭代变量的类型。
public class test : MonoBehaviour { // Use this for initialization void Start () { string[] words = { "hello", "linux ","PYTHON" }; var upperLowerWords = from w in words select new { upper = w.ToUpper(), lower = w.ToLower() }; foreach (var ul in upperLowerWords) { Debug.Log(ul.upper+ ul.lower); } } // Update is called once per frame void Update () { }}
定义和调用扩展方法
1. 定义一个静态类以包含扩展方法。该类必须对客户端代码可见将该扩展方法实现为静态方法,并使其至少具有与包含类相同的可见性。
2. 该方法的第一个参数指定方法所操作的类型;该参数必须以 this 修饰符开头。
3. 在调用代码中,添加一条 using 指令以指定包含扩展方法类的命名空间。
4. 按照与调用类型上的实例方法一样的方式调用扩展方法。
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace ConsoleApplication10{ public static class StringExtension { public static int wordCount(this String str) { return str.Split(new Char[] { ' ', '.', '!' }, StringSplitOptions.RemoveEmptyEntries).Length; } }}namespace TestExtension{ using ConsoleApplication10; class Program { static void Main(string[] args) { String s = "Hello Linux!"; Console.WriteLine(s.wordCount().ToString()); Console.ReadKey(); } }}
静态构造函数
静态构造函数用于初始化任何 静态 数据,或用于执行仅需执行一次的特定操作。 在创建第一个实例或引用任何静态成员之前,将自动调用静态构造函数。
静态构造函数具有以下特点:
• 静态构造函数既没有访问修饰符,也没有参数。
• 在创建第一个实例或引用任何静态成员之前,将自动调用静态构造函数来初始化类。
• 无法直接调用静态构造函数。
• 在程序中,用户无法控制何时执行静态构造函数。
• 静态构造函数的典型用途是:当类使用日志文件时,将使用这种构造函数向日志文件中写入项。
• 静态构造函数在为非托管代码创建包装类时也很有用,此时该构造函数可以调用 LoadLibrary 方法。
• 如果静态构造函数引发异常,运行时将不会再次调用该构造函数,并且在程序运行所在的应用程序域的生存期内,类型将保持未初始化。
- 扩展方法
- 扩展方法
- 扩展方法
- 扩展方法
- 扩展方法
- 扩展方法
- 扩展方法
- 扩展方法
- 扩展方法
- 扩展方法
- 扩展方法
- 扩展方法
- 扩展方法
- 扩展方法
- 扩展方法
- 扩展方法
- 扩展方法
- 扩展方法
- Python实现机器学习一(实现一元线性回归)
- 【Space Shoot Project】Shooting shots
- Cocoa Touch的类名为什么是以两个大写字母开头的?
- bzoj3943【Usaco2015 Feb】SuperBull
- Android support.v7库中的几种控件,布局控件
- 扩展方法
- 微信浏览器内建的WeixinJSBridge 实现“返回”操作 WeixinJSBridge.call('closeWindow');
- 求已知字符串的最大回文字符串长度,并输出该字符串
- 一看就会Android之View类和ViewGroup的关系
- WebView后台耗电问题
- 新手Kinect学习记录(一).——工作原理
- 文件/文件夹创建、复制与删除
- Linux netstat
- 每天一个linux命令(16):mv命令