号外号外: 原[图享网]更名为 码友网(codedefault.com) 啦,感谢大家一路上的陪伴与支持。代码的世界里,码友网与大家一起同行!

C#编程进阶视频教程--静态扩展方法与高级用法(基于静态扩展方法的链式编程)

示例教程 作者: Rector 322阅读 0评论 0收藏 收藏本文 编辑

郑重申明:本文未经许可,禁止任何形式转载

前言

大家好,
我是Rector,一位专注.NET开发以及国内.NET开发者社区的探索者和实践者。
我推出了一个名为[.NET微讲堂]的视频讲堂。目前录制了一个关于《C#编程进阶视频教程—静态扩展方法与高级用法》的视频教程,希望这些.NET社区贡献的小小力量,对愿意了解或者学习C#静态扩展方法的童鞋会有所帮助。

C#编程进阶视频教程--静态扩展方法与高级用法

本文我将把这个视频所涉及的部分概念,知识点以及核心源代码分享给大家。

概念及知识点

适用人群

具有一定C#程序设计基础(熟悉C#中什么是类,什么是类的方法和属性)

基本概念

什么是静态扩展方法;
静态扩展方法是一种特殊的静态方法,但可以像扩展类型上的实例方法一样进行调用;
静态扩展方法让你能够向现有类型“添加”方法,而无需创建新的派生类型、重新编译或以其他方式修改原始类型。

静态扩展方法主要特征

  • 1.静态扩展方法位于静态类,并且以static修饰符修饰的静态方法;
  • 2.静态扩展方法的第一个参数以this修饰符为前缀,后跟要扩展的目标类型及参数;
  • 3.静态扩展方法只能针对实例调用,即:静态类不能作为目标类;
  • 4.如果扩展方法和被扩展类中某个签名相同,则扩展方法永远不会被调用

案例实战

1.静态扩展方法的初级用法
基于一个简易计算器的静态扩展方法及实现

2.静态扩展方法高级用法—链式编程
以生活中的实例,结合C#静态扩展方法来实现链式编程

视频中的部分源代码

MyCalculator.cs:

using Calculator;

namespace StaticMethodDemo
{
    public class MyCalculator
    {
        public DotNetCalculator Calculator = new DotNetCalculator();

        public int Substract(int x, int y)
        {
            return x - y;
        }
    }
}

DotNetCalculatorExtension.cs

using Calculator;

namespace StaticMethodDemo
{
    /// <summary>
    /// 计算器静态扩展类
    /// </summary>
    public static class DotNetCalculatorExtension
    {
        /// <summary>
        /// 减法
        /// </summary>
        /// <param name="dotNetCalculator"></param>
        /// <param name="x"></param>
        /// <param name="y"></param>
        /// <returns></returns>
        public static int Subtract(this DotNetCalculator dotNetCalculator, int x, int y)
        {
            return x - y;
        }
    }
}

JuiceCup.cs:

using System.Collections.Generic;

namespace StaticMethodDemo
{
    /// <summary>
    /// 果汁杯
    /// </summary>
    public class JuiceCup
    {
        public JuiceCup()
        {
            Items = new List<string>();
        }
        /// <summary>
        /// 我们当前向果汁加的料剂
        /// </summary>
        public List<string> Items { get; set; }
        /// <summary>
        /// 当前这个果汁杯的盖子是否被盖上
        /// </summary>
        public bool IsLidCovered { get; set; }

        /// <summary>
        /// 向果汁杯中加入料剂
        /// </summary>
        /// <param name="item"></param>
        public void AddJuice(string item)
        {
            Items.Add(item);
        }
    }
}

JuiceCupExtension.cs:

namespace StaticMethodDemo
{
    /// <summary>
    /// 果汁杯的扩展类
    /// </summary>
    public static class JuiceCupExtension
    {
        /// <summary>
        /// 果汁杯初始化(加入白开水)
        /// </summary>
        /// <param name="juiceCup">果汁杯</param>
        /// <returns></returns>
        public static JuiceCup Initialize(this JuiceCup juiceCup)
        {
            juiceCup.AddJuice("加入了白开水");
            return juiceCup;
        }

        /// <summary>
        /// 向果汁杯加入橙汁
        /// </summary>
        /// <param name="juiceCup">果汁杯</param>
        /// <returns></returns>
        public static JuiceCup AddOrangeJuice(this JuiceCup juiceCup)
        {
            juiceCup.AddJuice("加入了橙汁");
            return juiceCup;
        }

        /// <summary>
        /// 向果汁杯加入香精
        /// </summary>
        /// <param name="juiceCup">果汁杯</param>
        /// <returns></returns>
        public static JuiceCup AddEssence(this JuiceCup juiceCup)
        {
            juiceCup.AddJuice("加入了香精");
            return juiceCup;
        }

        /// <summary>
        /// 向果汁杯加入冰块
        /// </summary>
        /// <param name="juiceCup">果汁杯</param>
        /// <returns></returns>
        public static JuiceCup AddIceCube(this JuiceCup juiceCup)
        {
            juiceCup.AddJuice("加入了冰块");
            return juiceCup;
        }

        /// <summary>
        /// 盖上盖子
        /// </summary>
        /// <param name="juiceCup">果汁杯</param>
        /// <returns></returns>
        public static void CoverLid(this JuiceCup juiceCup)
        {
            juiceCup.IsLidCovered = true;
        }
    }
}

Bartender.cs:

using System;

namespace StaticMethodDemo
{
    /// <summary>
    /// 调酒师
    /// </summary>
    public class Bartender
    {
        /// <summary>
        /// 调果汁
        /// </summary>
        public void MixJuice()
        {
            var juiceCup = new JuiceCup();
            juiceCup
                .Initialize()
                .AddOrangeJuice()
                .AddEssence()
                .AddIceCube()
                .CoverLid();

            //juiceCup.Items.ForEach(x =>
            //{
            //    Console.WriteLine(x);
            //});

            Console.WriteLine(string.Join(Environment.NewLine, juiceCup.Items));

            Console.WriteLine($"盖子是否已盖上:{juiceCup.IsLidCovered}");
        }
    }
}

希望对大家有所帮助,谢谢。
如果有学习过程中遇到任何问题,请加我们的.NET开发者社区学习交流群:483350228

阅读了该文章的人还浏览了...

本文永久链接码友网 » C#编程进阶视频教程--静态扩展方法与高级用法(基于静态扩展方法的链式编程)

发布于: 2018-01-25 14:00:00
分享扩散:

文章评论

获取验证码