金沙国际官网_金沙国际平台登录

因为这个金沙国际官网_金沙国际平台登录网站与很多的大型澳门赌场都有合作,金沙国际官网_金沙国际平台登录尽职尽责,高效执行,保持好奇心,不断学习,追求卓越,点击进入金沙国际官网_金沙国际平台登录马上体验吧,所以现在也正式地开始了营业。

您的位置:金沙国际官网 > 编程 > 简单的操作符重载,还没完善

简单的操作符重载,还没完善

发布时间:2019-11-02 03:38编辑:编程浏览(96)

    Wtf(一时半刻命名,随意起的 = _=),模仿WPF的框架,还并未有周到,唯有轻易的底蕴元素,协理数据绑定。纵然帮助mono不过mono有bug

     1 namespace 操作符重载
     2 {
     3     class Program
     4     {
     5         static void Main(string[] args)
     6         {
     7             Person person1 = new Person() { Name = "LiLei", Age = 12 };
     8             Person person2 = new Person("HanMeimei", 11);
     9             Person person3 = person1 + person2;
    10             Console.WriteLine($"Name's merge is {person3.Name}nAge's sum is {person3.Age}");
    11             Console.ReadKey();
    12         }
    13     }
    14     public class Person
    15     {
    16         public Person() { }
    17         public Person(string name, int age)
    18         {
    19             this.Name = name; this.Age = age;
    20         }
    21         public string Name { get; set; }
    22         public int Age { get; set; }
    23         public static Person operator +(Person p1, Person p2)
    24         {
    25             Person p3 = new Person(p1.Name + p2.Name, p1.Age + p2.Age);
    26             return p3;
    27         }
    28     }
    29 
    30 }
    

     随意写写

    写这么些只是兴趣爱好,感到也没多大体义了,如若那些UI框架完备了,有多少人乐于用?究竟Windows上有WPF,况兼C#跨平台需求也少之甚少呀。作者对WPF也不算熟谙,要周密的话,还恐怕有许多要写。一大堆常用控件和设计器。可是小编毫不XML来描述,而是一贯用C#来定义,设计器直接生成C#代码,因为自个儿觉着,要是有强盛的设计器,写XML正是剩下的,何况深入解析XML还影响属性,对于WPF,小编感到Xaml太啰嗦了。

     

     

     

    首先,纵然大家有二个Person类型

    WtfObject  约等于WPF里的DependencyObject重视对象。承继该类的目的,全数属性私下认可都以依附属性

    其类型定义如下

    天性写法:

      class Person
        {
            public string Name { get; set; } = "Person";
            public int Age { get; set; } = 18;
    
            public Person() { }
    
            public Person(string name,int age)
            {
                this.Name = name;
                this.Age = age;
            }
    
            public Person(string name) : this(name, 18) { }
            public Person(int age) : this("Person", age) { }
    
    
        }
    

     

    在正规情况下,大家让八个Person类型相加,是不恐怕的,举个例子:

            /// <summary>
            /// 绑定的数据上下文
            /// </summary>
            [UIPropertyMetadata(null, true)]
            public virtual object DataContext
            {
                get { return GetValue<object>(); }
                set { SetValue(value); }
            }
    

    图片 1

     

    那么怎么样能让四个Person类型相加,然后回来一个Person类型呢

    品质上的特点能够是 PropertyMetadata只怕UIPropertyMetadata 中的多个,默许值能够透过那三个特色来设置。就算不加那三个特色,那暗许值正是null可能0

    比方,小编想让名称为"张三"年龄为19的Person加上另贰个名叫"李四",年龄为20的Person

    举例是叶影参差属性类型暗中同意值,能够经过重写 OnOverrideMetadata 来安装

    然后再次回到叁个名称叫"张三吕四",年龄为39的Person

     

    那么就须要利用重载"+"号这几个操作符了

           protected override void OnOverrideMetadata(OverrideMetadata overridePropertys)
           {
                base.OnOverrideMetadata(overridePropertys);
                overridePropertys.Override("StrokeStyle", new UIPropertyMetadataAttribute(new Stroke(1), false, false, true));
            }
    

    为此,代码如同下,在Person中重载

     

         /// <summary>
            /// 重载+号
            /// </summary>
            /// <param name="p1"></param>
            /// <param name="p2"></param>
            /// <returns>返回一个Person类型</returns>
            public static Person operator+(Person p1,Person p2)
            {
                //将两个相加的Person类型分别让他们的
                //名字和年龄相加后的值赋值给被返回的Person类型
                Person p3 = new Person(p1.Name + p2.Name, p1.Age + p2.Age);
                return p3;
            }
    

     

    下一场我们就足以在Main中来相加多少个Person类型了

    数码绑定:

    看图

    var bind = label["Text"] <= "Test";//右到左数据绑定,数据源是DataContext的属性
    
    var bind = label["Text"] >= "Test";//左到右数据绑定,数据源是DataContext的属性
    
    var bind = label["Text"] != "Test";//右到左数据绑定,只传递一次 ,数据源是DataContext的属性
    
    var bind = label["Text"] == "Test";//双向绑定,数据源是DataContext的属性,双向绑定需要对象实现INotifyPropertyChanged
    
    
    
    var bind = label["Text"] <= button["Test"];//右到左数据绑定
    
    var bind = label["Text"] >= button["Test"];//左到右数据绑定
    
    var bind = label["Text"] != button["Test"];//右到左数据绑定,只传递一次
    
    var bind = label["Text"] == button["Test"];//双向绑定
    

    图片 2

     

    那般就瓜熟蒂落了

     

    接下来别的的举例

    本文由金沙国际官网发布于编程,转载请注明出处:简单的操作符重载,还没完善

    关键词: