环境
VS2022 .NET6 XUnit
启用资源管理器。视图
-测试资源管理器
仓库代码
自动属性
快捷方式:空白处输入 prop
快速两下 tab
- 自动属性
//私有变量
private string _name;
private string _name3;
public string Name
{
get { return _name; }
set { _name = value; }
}
//自动声明 常用
public string Name2 { get; set; } = "ABC";
//访问限制 只写
public string Name3
{
set => _name3 = value;
}
//只读
public string Name4 { get; } = nameof(Name3);
//可访问性
public string Name5
{
private get { return _name3; }
set
{
_name3 = "1";
value += "TTT";
}
}
//索引器
private byte[] arr = new byte[100];
public byte this[int i]
{
get { return arr[i]; }
set { arr[i] = value; }
}
匿名委托(匿名方法)
传统委托写法
public delegate void DoSomething(int a);
public delegate string DoSomething2(int a, string b);
//定义方法委托
public void DoIt(int a)
{
Console.WriteLine(a);
}
//常用于初始化参数
public void Config(DoSomething doMethod, int a)
{
doMethod(a);
}
// 常用于配置方法
public string Config(DoSomething2 doMethod)
{
return doMethod(1,"2");
}
//测试
var mc = new AnonDelegate();
//调用定义的方法委托
mc.Config(mc.DoIt, 10);
var x = 10;
//使用匿名委托
mc.Config(delegate(int a) { Console.WriteLine(a + x); }, 10);
//使用lamda表达式
mc.Config(a => Console.WriteLine(a + x), 10);
//加强版
//使用匿名委托
mc.Config(delegate(int a, string b) { return a + b; });
//使用lamda表达式 推荐
mc.Config((a, b) => a + b);
匿名方法 lambda表达式格式
(参数a,参数b,参数c...)=>
{
方法体
}
//无参数且只有一行代码简写
()=> 方法体;
匿名类
当某个类可能只用一次,用完即销毁,使用匿名类
//匿名类型:只能使用一次,仅能在当前的项目中使用
var aPeople = new { pName = "张三", pAge = 26, pAddress = "美国" };
//嵌套匿名类型
var aEmployee = new
{
JionDate = DateTime.Now,
Salary = 8000,
aPeople = new { pName = "张三", pAge = 26, pAddress = "美国" }
};
_testOutputHelper.WriteLine(aEmployee.aPeople.pName);//输出:张三
this扩展方法
为什么要有扩展方法,就是为了在不修改源码的情况下,为某个类增加新的方法。
语法:
定义静态类,并添加public的静态方法,第一个参数代表扩展方法的扩展类。它必须放在一个非嵌套、非泛型的静态类中(的静态方法);它至少有一个参数;第一个参数必须附加this关键字;第一个参数不能有任何其他修饰符(out/ref).第一个参数不能是指针类型。
注意:
1、C#只支持扩展方法,不支持扩展属性、扩展事件等;
2、方法名无限制,第一个参数必须带this,表示要扩展的类型;
3、扩展方法的命名空间可以使用namespace System,但不推荐;
4、定义扩展方法的类必须是静态类;
5、扩展方法虽然是public的静态方法,但是生成以后是实例方法,使用时需要先实例化对象,通过对象.方法名进行调用扩展方法
public static class ByteExtension
{
public static string ToX2(this SampleClass my ,byte value)
{
return value.ToString("X2");
}
}
评论 (1)