类的声明和访问级别

Posted lpxspring

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了类的声明和访问级别相关的知识,希望对你有一定的参考价值。

类声明

类声明的位置

1.命名空间内 2.创建另一个自己的命名空间 3.在命名空间外声明类,实际声明在全局命名空间 4. 在类内声明类,成为一个类的成员类

声明即定义(c#,java)

c,c++声明与定义分开,也可以合并在一起。

最简单的类声明

class-modifyers(opt类修饰符) class identify {class body}

类修饰符

new 适用于嵌套类
internal(在类库内可访问),protected,internal,private 修饰符将控制类的可访问性
abstract
sealed
static

类的访问控制

类成员的访问控制

一个类库

using System;

namespace Mylib
{
    public class Vehicle
    {
        public int MyProperty { get; set; }
    }
}

主函数

using Mylib;

namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            Vehicle vehicle = new Vehicle();
            vehicle.MyProperty = 100;
            System.Console.WriteLine(vehicle.MyProperty);
         
       
        }
    }
}

如果将类库里的成员函数的访问级别设为internal(默认为internal),那么尽管这个类是public,他的成员却无法访问
类库里的成员若为private,则类外继承的子类无法访问父类的成员(protected和public可以)
技术图片
protected将访问级别控制在继承链上。
访问级别还可以进行组合……

类的继承

基类-派生类 (父类-子类)
如果类没有继承,那么默认继承与system.object类。system.object无基类。
子类的实例也是父类的实例。可以用父类型的变量去引用子类的实例。子类的访问级别不能超越基类的访问级别。只能有一个基类,但是可以实现多个基接口。
继承的本质:派生类在基类已有的成员基础之上,对基类进行的横向和纵向上的扩展:

1.子类完整接受父类成员
静态类型语言(c++,c#,java)中,类成员一旦被引入继承链当中,他就会永远的向下传递,不能移除 .动态类型(python,javascript)可移除。
横向-类成员在数量上的扩充,纵向-类的更新迭代。

从基类构造器开始,先构造基类对象,然后一级一级往下构造,如果基类构造器带参数,那么子类也应该带参数。
特别注意的是,构造器是不被继承的,完全继承的是方法,属性,事件等。当出现基类构造器带参数时,采用以下两种方法

using System;

namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            Car car = new Car();
            car.show();
            Console.WriteLine(car.MyProperty);
            
        }
    }

    class Vehicle
    {
        public Vehicle( int content)
        {
            this.MyProperty = content;

        }
        public int MyProperty { get; set; }

    }

    class Car : Vehicle
    {
        public Car() : base(125)//1.
        {
            this.MyProperty = 2;
        }
        public Car(int content):base(content)//2.
        {}
        public void show()
        {
            Console.WriteLine(base.MyProperty);
        }

    }
}

面向对象的分格

class-based 基于类的继承封装多态
prototype-based 基于原型的继承封装多态(javascript)

以上是关于类的声明和访问级别的主要内容,如果未能解决你的问题,请参考以下文章

'var_name'未声明。由于其保护级别,它可能无法访问。在调试模式下

ios 中 成员变量和属性的区别

第44课 继承中的访问级别

“DefaultCatalog”未声明。它可能无法访问由于其保护级别。加上几个类似的错误

类的高级概念

java中的接口和抽象类的异同