摘自老师的课件
目录:
1. 隐式类型局部变量
2. 对象和集合初始化
3. 扩展方法
4. 查询表达式
一:隐式类型局部变量
可用var关键字声明局部变量,此时变量的类型由变量后面的初始化表达式进行推断
例:
var i = 5;
var s = "Hello";
var d = 1.0;
var numbers = new int[] {1, 2, 3};
注意(1)使用var关键字定义的变量必须被初始化。如下面的代码是错误的。
var num; //var变量未初始化
num = 10;
注意(2)var关键字只能用于声明局部变量(包括在for、foreach语句中使用的变量),而不能用于声明其他变量。
(3)var变量和object类型变量完全不同。使用object类型声明的变量是弱类型,可以被赋予任何类型的值,而使用var关键字声明的变量与普通变量一样,仍然是强类型变量。var变量被初始化时,其类型即被确定。以后不可以被赋予其他类型的值。
二:. 对象和集合初始化
对象初始化器
C#的对象初始化器(Object Initializer)可以很好的实现这一功能。其语法如下。
new 类名(){属性1=值1, 属性2=值2, … , 属性N=值N};
其中属性的个数和顺序是任意的,程序员可根据需要灵活编写代码。
三:扩展方法
扩展方法语法如下:
static class 封装类名{
返回类型 扩展方法名(this 扩展类名 变量名0, 参数列表) {
方法体
}
}
static class 封装类名{
返回类型 扩展方法名(this 扩展类名 变量名0, 参数列表) {
方法体
}
}
C#中的扩展方法允许向现有类中添加方法而不用修改现有类的代码。
甚至当没有某个类的源代码,也可以通过扩展方法向类中添加方法。
例如,可以向系统类String添加一些方法。
甚至当没有某个类的源代码,也可以通过扩展方法向类中添加方法。
例如,可以向系统类String添加一些方法。
应该慎重使用扩展方法,只有在用普通方法无法完成功能时,才应考虑使用扩展方法。
其中封装类名是扩展方法的容器,可以是任意合法标识符。扩展类名是要被扩展的类名,即要在其中添加方法的类。
扩展方法与普通静态方法的区别在于其方法的第一个参数前面有一个this关键字,这个this关键字是扩展方法的标志。
扩展方法与普通静态方法的区别在于其方法的第一个参数前面有一个this关键字,这个this关键字是扩展方法的标志。
例:不带参数的扩展方法
例:带参数的扩展方法
新闻列表中,如果新闻内容过长,则只显示前面固定长度的内容,后面加省略号。
为string类添加一个方法,abstractText,带一个int型参数n,获取前n个字符。如果不超过n个字符,则返回全部,否则返回前n个字符加省略号。
新闻列表中,如果新闻内容过长,则只显示前面固定长度的内容,后面加省略号。
为string类添加一个方法,abstractText,带一个int型参数n,获取前n个字符。如果不超过n个字符,则返回全部,否则返回前n个字符加省略号。
为string类添加一个ToInt方法,将字符串转换成整数。
综合实例如下:using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace cs
{
class Program
{
static void Main(string[] args)
{
//student s = new student() { id = "bzu001", name = "zhangsan", gender = "M", age = 20 };
//s.print();
//string t = "123";
//int n = t.ToInt();
//int m = n * n;
//Console.WriteLine(m);
//Console.ReadLine();
string s,s2;
int n;
Console.WriteLine("请输入一个新闻标题:");
s = Console.ReadLine();
Console.Write("要截取的字符个数:");
n = Console.ReadLine().ToInt();
s2 = s.abstractText(n);
Console.WriteLine(s2);
Console.ReadLine();
}
}
static class studentExt
{
public static void print(this student s)
{
Console.WriteLine("id:{0}\tname:{1}\tgender:{2}\tage:{3}\t", s.id, s.name, s.gender, s.age);
}
}
static class StringEet
{
public static int ToInt(this string s)
{
return int.Parse(s);
}
public static string abstractText(this String s, int n)
{
if (s.Length <= n)
return s;
return s.Substring(0, n) + "...";
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace cs
{
public class student
{
public string id { get; set; }
public string name { get; set; }
public string gender { get; set; }
public string major { get; set; }
public int age { get; set; }
public int grade { get; set; }
public int theClass { get; set; }
}
}
运行图如下: