zoukankan      html  css  js  c++  java
  • C#

    类名修饰符

    1. public: 任何人都可以访问
    2. internal: 默认修饰符,只有在同一个命名空间下才可以访问

    配置文件

    1. ASP.NET 配置文件为 web.config
    2. 桌面程序如 WinForm App.config

    多项目开发

    1. 右键添加引用, 本质上是命令行添加了 dll 的查找路径

    索引器(indexer)

    代码实例

    public 返回类型 this[参数]

    {

    get

    {

       

    }

    set

    {

    // 值为 value

    }

    }

    1. 索引器可以为只读或者只写(只写 get 或者 set)
    2. 编译成 IL 时转换为 get_Item 和 set_Item

    特殊的类

       

    密闭类

    1. 使用 sealed 关键字修饰, sealed 类不能有子类

    静态类

    1. 使用 static 修饰的类
    2. 只能声明 static 属性和方法
    3. 在静态类中可以定义某一个现有类的扩展方法, 只需要在想要扩展的静态方法的定义中的第一个参数使用 this 修饰, 第一个参数的类型就是被扩展的类的对象; 但是这个只是语法糖, 最终还是会被编译成普通的静态方法调用

       

    Property

    定义属性

    public 类型 属性名

    {

    get;

    set;

    }

    值类型

       

    结构体(包括 Int32 等)

    1. 隐式继承自 System.ValueType(所有的值类型都继承该类, 同时值类型是 sealed)
    2. 使用方式和类一样, 不同的是它是创建在栈中的, 拷贝是深拷贝

       

    其他

    数值类型(int, int 就是 Int32), 布尔类型, 枚举类型

    判断对象是否相等

    1. 比较地址使用 object.ReferenceEquals(obj1, obj2)
    2. 如果我们自己创建新的类, 则==比较的是地址, 可以进行运算符重载
    3. Equals 默认比较地址, 可以重载

    ref out 应用

    ref 类似 C 语言中 & 的取地址符号, 可以在函数内部改变指针的指向从而改变传入参数指针的指向, 对于值类型, 使用 ref 可以很方便实现 Swap 方法

       

    out 用于返回多个值, 如果使用了 out, 一般方法的原始返回值就是 bool 类型, 用来表明是否成功

       

    在 C# 中, 一般方法名以 Try 开头的不会抛出异常, 而是返回是否成功的 bool 类型, 并使用 out 返回其他返回值

    委托

    1. 本质就是将方法当作对象来使用, C# 中表现为一个数据类型
    2. 委托和类一样都是数据类型, 所以不能在类中定义类型, 需要直接在命名空间定义
      1. 示例代码

        delegate 返回类型 方法名(委托数据类型名)(参数列表);

      2. 创建委托

        委托类型 d = new 委托类型(需要委托的方法);

        // 也可以使用 委托类型 d = 需要委托的方法;

        d(参数); // 调用委托的函数

           

    3. 委托需要用户自定义类型, 比较麻烦, 微软添加了 Action 和 Func 委托, 方便我们使用委托, 不需要自定义委托数据类型, 一般也不自定义委托数据类型

       

    内置泛型委托

    Action

    1. 没有返回值, 有参数

       

    Func

    1. 有一个返回值, 有多个参数, 最后一个参数为传出参数

       

    委托的组合

    使用 + 号实现委托累加(需要类型相同), 按照顺序效用委托的方法

    使用 - 号实现委托删除

       

       

    事件

    事件是委托数据类型定义的一个变量(委托对象), 但是需要使用 event 关键字修饰, 事件与委托的使用区别就是事件不同从非空变为空

    事件内部封住了委托, 可以选择重写事件的 add 和 remove 方法

    匿名方法

    使用 delegate 关键字

    delete(参数)

    {

       

    }

       

    Lambda 表达式

    (int i) => {Console.WriteLine(i);}

    (int i) => Console.WriteLine(i);

    (i) => Console.WriteLine(i);

    i => Console.WriteLine(i);

    i => "i == " + i

    反射(System.Reflection)

    每个类都一个静态 Type 类型的变量

       

    获取 Type 对象方法

    • obj.GetType()
    • typeof(obj)
    • Type.GetType("namespace")

       

    创建对象

    • Activator.CreateInstance(typeObj)
    • ConstructorInfo c = GetConstructor(new Type[]{typeof(string), typeof(int)})

       

    Type 的属性和方法

    • BaseType
    • Name
    • FullName(有命名空间)
    • IsArray()
    • IsPublic()
    • GetConstructor(Type[])
    • GetFields()
    • GetMethods()
    • GetMethod("name")
      • Invoke()
    • GetMethod("name", Type[])
    • GetProperties()
    • GetProperty("name")
      • SetValue()
    • GetAttributes()

       

    反射应用

       

    Attribute

    • 一般用来添加元信息(被反射读取), 起到辅助的作用, 它是被反射所利用的, 反射中使用 GetCustomAttributes() 获取当前被修饰的属性或者方法上的 Attributes(使用GetCustomAttribute(Type)获取特定的 Attribute, 找不到返回空), 通过分析获取到的 Attribute, 实现一些辅助的功能
    • 定义 Attribute(继承 Attribute 类) 时, 命名以 Attribute 结尾, 但是再使用的时候可以省略后缀

    正则表达式

       

    命名空间

    System.Text.RegularExpressions

       

    使用

    1. Regex.IsMatch("文本", "正则表达式") 返回 bool
    2. Regex.Match("文本", "正则表达式") 返回 Match 对象
      1. match.Groups[0] 匹配的组
        1. Value 获取匹配的字符串

       

       

    XML 使用

    示例代码

    XmlDocument doc = new XmlDocument();

    // doc.Load(path);

    XmlNodeList nodes = Doc.DocumentElement.ChildNodes;

    for (XmlNode node in nodes)

    {

    XmlElement ele = (XmlElement)node;

    // 标签的属性

    string name = node.GetAttribute("propertyName");

    // 标签的子标签

    XmlNode n = ele.SelectSingleNode();

    // AppendChild 用于添加节点

    // SetAttribute(name, value) 设置属性

    }

    // doc.Save(path)

       

  • 相关阅读:
    LINQ to SQL 模拟实现 ROW_NUMBER() OVER(ORDER BY ...) 的功能
    TCP粘包、拆包与通信协议
    Decoder和Encoder
    Future 和 ChannelFuture
    通道Channel
    通道初始化器ChannelInitializer
    数据处理器ChannelHandler
    通道配置项 ChannelOption
    ChannelPipeline
    启动配置类Bootstrap 和 ServerBootstrap
  • 原文地址:https://www.cnblogs.com/megachen/p/12636456.html
Copyright © 2011-2022 走看看