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()
    {
    }
    }

  • 相关阅读:
    PointToPointNetDevice doesn't support TapBridgeHelper
    NS3系列—10———NS3 NodeContainer
    NS3系列—9———NS3 IP首部校验和
    NS3系列—8———NS3编译运行
    【习题 7-6 UVA
    【Good Bye 2017 C】 New Year and Curling
    【Good Bye 2017 B】 New Year and Buggy Bot
    【Good Bye 2017 A】New Year and Counting Cards
    【Educational Codeforces Round 35 D】Inversion Counting
    【Educational Codeforces Round 35 C】Two Cakes
  • 原文地址:https://www.cnblogs.com/d685600/p/3650361.html
Copyright © 2011-2022 走看看