• C#笔记-基础知识(二)


    1.类的继成

    #所有类隐式继成object类

    #单继成

    #屏蔽(mask)一个继承数据成员,派生类声明新的相同类型,相同名称的成员。

    #声明一个相同签名的函数成员,可以隐藏或屏蔽继承的函数成员,签名由名称和参数列表组成,不包括返回类型。

    #明确屏蔽使用new修饰符。

    #使用基类访问(base access)表达式访问隐藏的继承成员,base.Field1。

    2.虚方法和覆写方法

    #派生类的方法和基类的方法有相同的签名和返回类型, 基类的方法使用virtual 标注,派生类的方法使用override 标注

    #方法必须有相同的可访问性,都是public, private

    #不能覆写static方法或非虚方法

    #方法,属性和索引器,成员类型事件都可以被声明为virtual 和override

    #当使用对象基类部分的引用调用一个覆写的方法时, 方法的调用被沿派生层次上溯执行,一直到标记为overide的方法的最高派生版本

    #!在构造函数中调用虚方法是极不推荐的。在执行基类的构造函数时,基类的虚方法会调用派生类的覆写方法,但这时在执行派生类的构造函数方法体之前,

     !因此调用会在派生 类没有完全初始化之前传递到派生类。

    3. 构造函数初始化语句

    public MyCalss(int x): this(x, "a string ")
    {
      //C# 中这样可以调用 任意 当前类的其它 构造函数 }

    4.程序集间的继承

    #基类必须被声明为public 。必须在Visual Studio工程中的References节点中添加对包含该基类的程序集的引用,在Solution Explorer中找到该标题

    5.抽象成员

    #必须是函数成员,不能是字段和常量,可以是属性,方法,事件,索引。必须用abstract修饰,不能有实现。不能附加virtual修饰符。派生类必须实现对应的override函数

    6.抽象类

    #用abstract class ,不能创建实例,可以包含抽象成员或普通的非抽象成员。可以派生另一个抽象类。

    7.密封类

    #只能被用作独立的类。 不能用作基类, 用sealed修饰符标注

    8.静态类

    #类本身标记为static 。类所有成员都是静态。可以有一个静态构造函数, 不能有实例构造函数。静态类是隐式密封的,不能被继成。

    9.扩展方法

    #声明扩展方法的类必须声明为static, 方法本身必须是static, 扩展方法必须包含关键字this做为他的第一个参数类型,并在后面跟着它所扩展的类的名称

    10.命名约定

    11. 字符串前加 @ 字符串中是字面量,转义字符串不会被求值,例外的是相邻的双引号,他们被解释为单个双引号,
    string rst = "value 1 5, val2 10";
    string vst = @"value 1 5,“” val“” 2 10"; //不解释制表符


    12. 定义类的转换,重载运算符

    class LimitedInt
    {
    private int _value = 9;
    public static implicit operator int (LimitedInt li)
    {
    return li._value;
    }
    public static implicit operator LimitedInt(int x)
    {
    var li = new LimitedInt();
    li._value = x;
    return li;
    }
    public static LimitedInt operator + (LimitedInt x , double y)
    {
    LimitedInt li = new LimitedInt();
    li._value = x._value + (int)y;
    return li;
    }

    }

    13. typeof运算符
    using System.Reflection;

    class Program
    {
    static voic main()
    {
    Type t = typeof(LimitedInt);
    FieldInfop[] fi = t.GetFields();
    MethodInfo[] mi = t.GetMethods();
    var s = new LimitedInt();
    foreach(MethodInfo m in mi)
    Console.WriteLine("Method:{0}", m.Name);
    Console.writeLine("{0}", s.GetType().Name);

    }
    }


    14. using语句帮助减少意外的运行时错误带来的潜在问题,包装了资源的使用。它执行下列内容:
    *分配资源
    *statement放进try块
    *创建资源的Dispose 方法的调用, 并把它放进finally块

    class Program
    {
    using(TextWriter tw1 = File.Createtext("aaa.txt"),
    tw2 = File.CreateText("bbb.txt"))
    {
    tw1.WriteLine("for score and seven years ago, ... ");
    tw2.writeLine("early to bed; early to rise .. ");
    }
    using(TextReader tr1 = File.OpenText("aaa.txt"),
    tr2 = File.OpenText("bbb.txt"))
    {
    string InputString;
    while( null != (InputString = tr1.ReadLine()))
    console.WriteLine(InputSring);
    while( null != (InputStinrg = tr2.ReadLine()))
    COnsole.WriteLine(InputString);
    }
    }

    》结构是值类型, 结构本身派生自System.ValueType > object

    》enum [Flasgs]特性,不会改变计算结果, 但却提供了一些方便的特性,
    》》它能知编译器,该枚举成员不公可以用作单独的值, 还可以按位标志进行组合,
    》》它允许枚举的ToString的方法为位标志的值提代更多的格式化信息。

  • 相关阅读:
    day03 字符串
    day02 运算符和编码
    day01 初识Python
    windows 安装yaml支持和pytest支持等
    Python自动补全缩写意义
    关于python接口测试connect error
    关于Python的post请求报504错误
    python函数参数*args **kwargs
    利用Python语言Appium启动ios app
    shell 中| 用法
  • 原文地址:https://www.cnblogs.com/blackcatx/p/5920947.html
Copyright © 2020-2023  润新知