zoukankan      html  css  js  c++  java
  • chap05 C# 高级类型

    1. 委托 

    可以参考 VS2010 自带例子

    对委托的操作(+,-), 多播委托:

    匿名委托:

    2. 事件

    1. 定义一个字符串列表类(继承自List<string>)
    2. 定义委托
    3. 根据委托定义事件
    4. 定义激发事件的方法
    5. 定义事件处理函数
    6. 订阅
    namespace MyEvent
    {
        class Program
        {
            class StringList:List<string>
            {
                public delegate void dele();
                public event dele Changed;  // 事件定义(用委托)
                public new void Add(string item) // 用new隐藏基类中的方法
                {
                    base.Add(item); // 调用基类中的方法
                    Changed(); // 事件激发
                }
                
            }
            /// <summary>
            /// 事件处理函数
            /// </summary>
            static void ListChanged()  
            {
                Console.WriteLine("ListChanged_Add");
            }
            static void Main(string[] args)
            {
                StringList names = new StringList();
                names.Changed += ListChanged; // 事件订阅
                names.Add("Tom");
                names.Add("JIm");
                names.Add("Lily");
            }
        }
    }

    3. 结构——C语言的馈赠

    • 结构体中可以声明的内容:字段,属性,方法。
    • 结构是值类型,而类是引用类型。

    4. 密封类、分部类

    • 密封类(sealed class):不能被继承的类
    • 分部类(partial class):将一个较长的类放在不同文件中

    5. 枚举类型

    声明方式:

    enum Days { Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday };

    enum Months : byte { Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec };

    默认情况下,枚举中每个元素的基础类型是 int。 可以使用冒号指定另一种整数值类型,如前面的示例所示。

    枚举类型作为位标志

        [Flags]
        enum Days2
        {
            None = 0x0,
            Sunday = 0x1,
            Monday = 0x2,
            Tuesday = 0x4,
            Wednesday = 0x8,
            Thursday = 0x10,
            Friday = 0x20,
            Saturday = 0x40
        }
        class MyClass
        {
            Days2 meetingDays = Days2.Tuesday | Days2.Thursday;
        }

    这样就可以使用:OR(|),XOR(^),AND(&)操作符

    // Initialize with two flags using bitwise OR.
    meetingDays = Days2.Tuesday | Days2.Thursday;
    
    // Set an additional flag using bitwise OR.
    meetingDays = meetingDays | Days2.Friday;
    
    Console.WriteLine("Meeting days are {0}", meetingDays);
    // Output: Meeting days are Tuesday, Thursday, Friday
    
    // Remove a flag using bitwise XOR.
    meetingDays = meetingDays ^ Days2.Tuesday;
    Console.WriteLine("Meeting days are {0}", meetingDays);
    // Output: Meeting days are Thursday, Friday
    
    // Test value of flags using bitwise AND.
    bool test = (meetingDays & Days2.Thursday) == Days2.Thursday;
    Console.WriteLine("Thursday {0} a meeting day.", test == true ? "is" : "is not");
    // Output: Thursday is a meeting day.
  • 相关阅读:
    linux下mysql的root密码忘记解决方法
    基于NIO2的遍历文件夹简单复制
    bootstrap插件bootstrapValidator常用验证规则总结
    《程序员修炼之道》-读书笔记六-工厂模式下的伪DI依赖注入
    cpu 突增问题排查
    一次线上OOM 的定位
    熔断、限流、降级的区别
    Mac 下 idea 在同一个窗口下打开多个项目
    No operations allowed after connection closed
    java 死锁演示
  • 原文地址:https://www.cnblogs.com/wangshide/p/2570927.html
Copyright © 2011-2022 走看看