zoukankan      html  css  js  c++  java
  • c# 重载运算符(+-|&)和扩展方法

    通常我们需要对class的相加,相减,相乘 等重载以适应需求, 如caml查询的时候,我们可以定义一个caml类,然后来操作这些查询.

    首先,我们定义一个class为Test
    public class Test

     然后定义两个成员,一个int类型的ID,一个字符串类型的Name.

            public int ID;
            public string Name;

    然后定义构造函数

            public Test()
            {
            }
    
            public Test(int id)
            {
                this.ID = id;
            }
    
            public Test(int id, string name)
            {
                this.ID = id;
                this.Name = name;
            }

    重载两个class相加的运算符,

            public static Test operator +(Test t1, Test t2)
            {
                if (t2.Name!= null)
                {
                    return new Test(t1.ID + t2.ID, t1.Name + t2.Name);
                }
                else
                {
                    return new Test(t1.ID + t2.ID);
                }
            }

    重载两个class的|运算,其他的运算符如(-,*,/,&)大家可以自己去试试.

            public static Test operator |(Test t1, Test t2)
            {
                //显示ID大的class
                return new Test(t1.ID > t2.ID ? t1.ID:t2.ID);
            }

    下面写了一个对Test这个class的扩展方法,相等于这个class自带的成员方法. 扩展返回发的写法关键是this 后面带类型参数

        internal static class Util
        {
            public static string Format(this Test t)
            {
                StringBuilder sb = new StringBuilder();
                if (t.ID != null)
                {
                    sb.AppendLine("ID:"+t.ID.ToString());
                }
                if (!string.IsNullOrEmpty(t.Name))
                {
                    sb.AppendLine("Name:" + t.Name.ToString());
                }
                return sb.ToString();
            }
        }

    调用这个方法:

        class Program
        {
            static void Main(string[] args)
            {
                //测试两个class相加
                Test test1 = new Test(1);
                Test test2 = new Test(2);
                Console.WriteLine("两个class相加的结果为:"+(test1 +test2).Format());
                Console.WriteLine("两个class比较值大的结果为:" + (test1 |test2).Format());
                
            }
        }

    运行结果如下:

    全部代码:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace Charlie.ConsoleWindow
    {
        class Program
        {
            static void Main(string[] args)
            {
                //测试两个class相加
                Test test1 = new Test(1);
                Test test2 = new Test(2);
                Console.WriteLine("两个class相加的结果为:"+(test1 +test2).Format());
                Console.WriteLine("两个class比较值大的结果为:" + (test1 |test2).Format());
                
            }
        }
    
        public class Test
        {
            public int ID;
            public string Name;
    
            public Test()
            {
            }
    
            public Test(int id)
            {
                this.ID = id;
            }
    
            public Test(int id, string name)
            {
                this.ID = id;
                this.Name = name;
            }
    
            public static Test operator +(Test t1, Test t2)
            {
                if (t2.Name!= null)
                {
                    return new Test(t1.ID + t2.ID, t1.Name + t2.Name);
                }
                else
                {
                    return new Test(t1.ID + t2.ID);
                }
            }
    
            public static Test operator |(Test t1, Test t2)
            {
                //显示ID大的class
                return new Test(t1.ID > t2.ID ? t1.ID:t2.ID);
            }
        }
    
        internal static class Util
        {
            public static string Format(this Test t)
            {
                StringBuilder sb = new StringBuilder();
                if (t.ID != null)
                {
                    sb.AppendLine("ID:"+t.ID.ToString());
                }
                if (!string.IsNullOrEmpty(t.Name))
                {
                    sb.AppendLine("Name:" + t.Name.ToString());
                }
                return sb.ToString();
            }
        }
    }
    View Code

    如有错误,请大家指正~~~~

  • 相关阅读:
    linux 文件时间
    linux命令学习 touch
    linux命令学习 cp
    Linux命令学习 mv
    SpringMVC mvc详解
    JDBC原生态代码
    java中静态方法中调用非静态方法的详解
    Spring技术详解
    Spring中的 BeanFactory和 ApplicationContext的区别与解释
    java多线程编程相关技术
  • 原文地址:https://www.cnblogs.com/fengqingyangNo1/p/3376888.html
Copyright © 2011-2022 走看看