标签搜索
Net

别吃糖(一)

艾塔
2023-05-05 / 1 评论 / 19 阅读 / 正在检测是否收录...
环境

VS2022 .NET6 XUnit
启用资源管理器。视图-测试资源管理器
lh9wiqhv.png

仓库代码

自动属性

快捷方式:空白处输入 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");
        }
    }
Assert判断

lha0gq7g.png

0

评论 (1)

取消
  1. 头像
    dululux
    Windows 10 · Google Chrome

    画图

    回复