C#对象、实例等几个易混淆概念

    C#新手可以继续往下看,基本功扎实的老鸟可以出门右转,0.0。

问题:

变量、对象、(类型)实例这几个概念放在一起会搞混吗?

②那么引用类型(对标——值类型)、声明类型、实例类型这几个概念放在一起又会搞混吗?

探究:

    下面是对于上述概念进行理解的一个例子(下方代码中的ValueClass不是本篇重点)。

    class MyProgram
    {
        class RefrenceClass
        {
            public int field;//字段
            public RefrenceClass() { }
            public RefrenceClass(int i) { }
        }
        
        struct ValueClass
        {
            const int MaxVlaue = Int16.MaxValue;//const可以声明简单类型的常量。 不能有其他结构类型的常量
            static readonly ValueClass2 OtherValueClass;//static readonly可以声明简单类型的常量,也可以是其他结构类型的常量
            //const ValueClass2 valueClass2;//CS0283、CS0145  error
            private static List<int> ValueList;
            struct ValueClass2 { }
            static ValueClass()
            {
                ValueList = new List<int>();
                OtherValueClass = new ValueClass2();
            }

            int CurrentIndex;
            int NextValue()
            {
                return CurrentIndex > 0 && CurrentIndex < ValueList.Count - 2 ? ValueList[CurrentIndex + 1] : -1;
            }
        }

        static void Main()
        {
            int x = 1;
            int y = 1;
            int i = x++;
            int j = ++y;
            RefrenceClass c;
            //首先RefrenceClass是一个类型
            //变量c是在方法Main中声明的一个局部变量
            //变量c的声明类型是RefrenceClass(RefrenceClass是一个引用类型,所以c是一个引用类型的变量)
            c = new RefrenceClass();
            //①new RefrenceClass()以"RefrenceClass类型的公共无参构造函数"创建了一个(类型)实例
            //②并将该"实例的引用"(被称为对象)存储在变量c中
            //③即变量c中存储的对象是在①中创建出的实例
            //④RefrenceClass是这个实例的实例类型
            c = new RefrenceClass(1);
            //①new MyClass()以"RefrenceClass的包含一个int类型参数的构造函数"创建了一个(类型)实例
            //②同上②
            //③同上③
            //④同上④
        }
    }

结语:    

    那么,以下是根据本人认识做出的总结(如有错误,烦请指出):

①C#中的类型分为引用类型(如我们自定义的类)和值类型(如结构类型和枚举类型)。

引用类型有类类型、接口类型、数组类型或委托类型。值类型有结构类型或枚举类型。

②变量使用时需要先进行声明,变量声明由两部分组成:声明类型(声明类型可以为值类型或引用类型)+变量名称。

③被声明为引用类型的变量,其值是一个对象,这个对象是对某个类型的一个实例的引用。

注意:被声明为值类型的变量和对象这一概念无关,值类型的赋值是把值类型一个实例的副本交由变量存储。(只有通过装箱操作把值类型的实例显示转换为引用类型Object后所对应的值才能称为对象)。参考:C#——类型

实例类型,就是赋予变量值的对象,所引用的实例,被创建时所调用的类型构造函数所属的类型。(有点拗口,才疏学浅还请见谅,即:typeof(变量的值=对象->实例)

注意:根据面向对象六大原则的里氏替换原则,任何基类出现的地方其派生类都可以出现,所以声明类型是基类的变量,可以被赋值为派生类的实例,导致我们所讲的声明类型和实例类型不相同。

猜你喜欢

转载自blog.csdn.net/qq_23958061/article/details/110293030
今日推荐