zoukankan      html  css  js  c++  java
  • C#基础 基本语法3

    补充:九章
    1、类用class定义、接口用interface定义。可以使用public和internal关键字定义类和接口的可访问性,类可以定义为abstract或sealed以控制继承性。
    class Myclass
    {
    //Class members.
    }
    //默认情况下类的声明为内部的,只有当前项目的代码才能访问它。可以使用internal访问修饰符关键符显示指定它。如下(这个不必要的)
    internal class Myclass
    {
    //class members.
    }
    2、除了public和internal中还可以使用abstract指定类是抽象的(不能实例化,只能继承,可以有抽象成员)或密封的(sealed,不能继承)
    public abstract class MyClass//不能实例化只能继承
    {
    //Class member,may be abstract.
    }
    public sealed class MyClass//密封类可以是公共的或者内部的
    {
    //Class members.
    }
    //C#的类定义中,只能由一个基类,如果继承了一个抽象类,就必须实现所继承的所有成员(除派生类也是抽象的)
    //编译器不允许派生类的可访问性高于基类--------内部基类可以继承于一个公共积累,但公共基类不能继承于一个内部类
    public class MyBase
    {
    //Class members.
    }
    internal class MyClass:Base
    {
    //Class members.
    }

    internal class MyBase//这个是错误的,不能编译
    {
    //Class members.
    }
    public class MyClass:Base
    {
    //Class members.
    }

    3、如果没有定义基类,则被定义的类就只集成于基类System.Object它在C#中的别名是object(继承层次的结构中,所有类的根都是System.Object)
    可以在冒号后面指定支持的接口,但是基类和接口同时指定时
    public class MyClass:MyBase,IMyInterface
    {
    //Class members.
    }
    可以指定多个接口
    public class MyClass:MyBase,IMyInterface,IMySecondInterface
    {
    //Class members.
    }


    //无或internal 只能在当前项目中访问类
    abstract或internal abstract 类只能在当前项目中访问,不能实例化,只能提供继承使用
    public abstract 类可以在任何地方访问,不能实例化,只能提供继承之用
    sealed或internal sealed 类只能在当前项目中访问,不能派生之用,只能实例化
    public sealed类可以在任何地方访问,不能提供派生之用,只能实例化。


    声明接口 //修饰符关键字public 和internal使用方式是相同的。
    interface IMyInterface //public interface IMyInterface
    {
    //Interface members.
    }
    不能在接口中使用关键字abstract和sealed

    public interface IMyInterface:IMyBaseInterface,IMyBaseInterface2
    {
    //Interface members.
    }

    接口不是类,所以没有继承System,Object,但是为了方便System.Object可以通过接口类型的变量来访问-------------不能用实例化类的方式实例化接口。


    4、Equals(object,object) 返回bool

    ReferenceEquals(object,object) 返回bool 看看他们是否同一个实例的引用

    GetType() 以System.Type对象的形式返回对象类型 返回 System.Type.
    if(myObj.GetType()==type(MyComplexClass)){ }

    GetHashCode() 用作对象的散列函数,这是一个必选函数,返回一个以压缩形式表示的对象状态的值

    5、在C#中定义类时,常常不需要定义相关的构造函数和析构函数,编译器会自动添加他们。

    Class MyClass
    {
    public MyClass()
    {
    //Default comstructor code.
    }

    public MyClass(int myint)//看可以用相同的方式给类添加非默认的构造函数,其方法是提供参数
    {
    //Nodedefault constructor code(used myInt)
    }//可提供的构造函数没有限制
    }

    6、构造函数执行序列
    public class MyBaseClass
    {
    public MyBaseClass()
    {
    }
    public MyBaseClass(int i)
    {
    }
    }

    public class MyDerivedClass:MyBaseClass
    {
    public MyDerivedClass()
    {
    }
    public MyDerivedClass(int i)
    {
    }
    public MyDerivedClass(int i,int j)
    {
    }
    }

    MyDerivedClass myObj=new MyDerivedClass();
    类的访问序列,执行序列为
    System.Object.Object();
    MyBaseClass.MyBaseClass();
    MyDerivedClass.MyDerivedClass();

    //如果是MyDerivedClass myObj=new MyDerivedClass(4);
    System.Object.Object();
    MyBaseClass.MyBaseClass();
    MyDerrivedClass.MyDerivedClass(int i);

    想改变执行序列
    public class MyDerivedClass:MyBaseClass
    {
    ....
    public MyDerivedClass(int i,int j):base(i)
    {
    }
    其中base关键字指定NET实例化过程中使用基类中所指定参数的构造函数。这里使用int参数(其值通过参数i传送给MyDerivedClass构造函数),所以应使用MyBaseClass(int i) 这么做将不调用MyBaseclass() 而执行
    System.Object.Object();
    MyBaseClass.MyBaseClass(int i);
    MyDerivedClass.MyDerivedClass(int i,int j);

    ------------------------------------------------
    除了base关键字,还可以将另一个关键字this用作构造函数初始化器。这个关键字指定在调用指定的构造函数前,NET实例化过程对当前类使用非默认构造函数
    public class MyDerivedClass:MyBaseClass
    {
    public MyDerivedClass():this(5,6)
    {
    }
    ........
    public MyDerivedClass(int i,int j):base(i)
    {
    }
    }

    System.Object.Object();
    MyBaseClass.MyBaseClass(int i);
    MyDerivedClass.MyDerivedClass(int i.int j);
    MyDerivedClass.MyDerivedClass();
    唯一的限制是,使用构造函数初始化器只能指定一个构造函数。

    定义构造函数时不能创建无线循环
    public class MyBaseClass
    {
    public MyBaseClass():this(5){ }
    public MyBaseClass(int i):this()
    {
    }
    }

  • 相关阅读:
    信息学奥赛一本通(C++)在线评测系统——基础(一)C++语言—— 1041:奇偶数判断
    1040:输出绝对值
    1040:输出绝对值
    1040:输出绝对值
    信息学奥赛一本通(C++)在线评测系统——基础(一)C++语言—— 1039:判断数正负
    信息学奥赛一本通(C++)在线评测系统——基础(一)C++语言—— 1039:判断数正负
    信息学奥赛一本通(C++)在线评测系统——基础(一)C++语言—— 1039:判断数正负
    Winform应用程序实现通用遮罩层
    SQL WITH子句、分析函数
    SQL WITH子句、分析函数
  • 原文地址:https://www.cnblogs.com/d685600/p/3650361.html
Copyright © 2011-2022 走看看