首页 后端开发 C#.Net教程 C#学习日记21----封装 与 访问修饰符

C#学习日记21----封装 与 访问修饰符

Jan 21, 2017 pm 03:30 PM

封装:

       被定义为"把一个或多个项目封闭在一个物理的或者逻辑的包中"。在面向对象程序设计方法论中,封装是为了防止对实现细节的访问。也就是把里面实现的细节包起来,这样很复杂的逻辑经过包装之后给别人使用就很方便,别人不需要了解里面是如何实现的,只要传入所需要的参数就可以得到想要的结果。封装使用访问修饰符 来实现。一个访问修饰符 定义了一个类成员的范围和可见性。

 

访问修饰符:

            在 类class的声明与定义  中我简略的介绍了访问修饰符,不是很具体,这里我们深入学习访问修饰符;

              在C#中访问修饰符有5个public、private、protected、internal、protected internal;

public修饰符

         public 访问修饰符允许一个类将其成员变量和成员函数暴露给其他的函数和对象。任何公有成员可以被外部的类访问。(不限制对成员的访问,子类可以,对象也可以)

using System;  
using System.Collections.Generic;  
using System.Linq;  
using System.Text;  
  
namespace Test  
{  
    class student  
    {  
        public int Chinese=80;  
        public int Math=67;  
        public int English=45;  
         //定义一个方法  
        public int total()  
        {  
            int sum = 0;  
            sum = Chinese + Math + English;  
            return sum;  
        }  
    }  
    class teacher  
    {  
        static void Main(string[] args)  
        {  
            student stu = new student();  //实例化一个对象  
            Console.WriteLine("Chinese = {0}\nMath = {1}\nEnglish = {2}\nTotal = {3}",stu.Chinese,stu.Math,stu.English,stu.total());  
        }  
    }  
}
登录后复制

输出结果:

648.png

在上面的例子中student中的所有成员都是public类型访问,所以他的实例化对象 stu 能够访问所有成员。

private修饰符

Private 访问修饰符允许一个类将其成员变量和成员方法对他的对象进行隐藏。只有同一个类中的方法可以访问它的私有成员。即使是类的实例也不能访问它的私有成员 (不允许他的子类或对象访问)。

我们将上面的例子利用下:

using System;  
using System.Collections.Generic;  
using System.Linq;  
using System.Text;  
  
namespace Test  
{  
    class student  
    {  
        private int Chinese=80;  
        private int Math=67;  
        public int English=45;  
  
        private int total()  
        {  
            int sum = 0;  
            sum = Chinese + Math + English;  
            return sum;  
        }  
    }  
    class teacher  
    {  
        static void Main(string[] args)  
        {  
            student stu = new student();  
            int Chinese = stu.Chinese;     //出错了,不可访问(private)  
             
            int English = stu.English;   //可以访问 (public)  
  
            int total = stu.total();  // 不可访问 private 方法  
        }  
    }  
}
登录后复制

由于在student类中对变量 Chinese、Math 方法 Total 有private 访问限制,所以无法通过对象stu 访问

protected修饰符

Protected 访问修饰符允许子类访问它的基类的成员变量和成员函数。这样有助于实现继承。(不允许对象访问,允许类中的方法访问,允许子类访问)

using System;  
using System.Collections.Generic;  
using System.Linq;  
using System.Text;  
  
namespace Test  
{  
    class student  
    {  
        //定义protected 类型保护  
        protected int Chinese=80;  
        protected int Math=67;  
        protected int English=45;  
  
        protected int total()  
        {  
            int sum = 0;  
            sum = Chinese + Math + English;  
            return sum;  
        }  
    }  
    class teacher:student  //teacher 继承student类  
    {  
        static void Main(string[] args)  
        {  
            teacher teac = new teacher();   //创建子类 teacher 对象  
            //全部成功访问  
            int Chinese = teac.Chinese;      
             
            int English = teac.English;    
  
            int total = teac.total();  
              
        }  
    }  
}
登录后复制

internal修饰符

Internal 访问修饰符允许一个类将其成员变量和成员方法暴露给当前程序集中(当前项目)的其他方法和对象。换句话说,带有 internal 访问修饰符的任何成员可以被定义在该成员所定义的程序集(项目)内的任何类或方法访问。

要学习internal修饰符,我们就得先学习使用Vs2010创建多个工程以及工程与工程的引用方法:

先创建一个工程文件:命名为 Test_internal

649.png

点击确定后,找到解决方案管理器:


650.png

右键 解决方案“Test_internal”(1个项目) --->添加--->新建项目---->visual C#--->控制台; 在名称栏中我们命名为Class_internal 确定;这样我们就创建了2 个项目(程序集)


651.png

其实我们上面输入的名称就是我们定义的命名空间的名称,打开代码Class_internal的命名空间是 namespace Class_internal, Test_internal 的命名空间是namespace Test_internal,我们在一个工程里通过using 命名空间来引用另一个工程的内容,不过在此之前我们还得 在 “引用” 列表中添加被引用的工程路径:

右键 “引用”--->添加引用--->项目。 在项目名称列表中找到要引用的项目名称这里我们选 Class_internal 单击确定,引用列表中就会多出 Class_internal 引用成功

652.png

我们打开Class_internal中的program.cs编辑以下代码

using System;  
using System.Collections.Generic;  
using System.Linq;  
using System.Text;  
  
namespace Class_internal  
{  
    public class student  
    {  //定义2个 internal 访问类型与一个public访问类型  
        internal int Chinese=80;  
        internal int Math=70;  
        public int English=56;  
      //定义一个internal 访问类型方法  
        internal int Total()  
        {  
            int sum = 0;  
            sum = Chinese + Math + English;  
            return sum;  
        }  
        static void Main(string[] args)  
        {   
          
        }  
    }  
     
}
登录后复制

然后在Test_internal中编辑以下代码:

using System;  
using System.Collections.Generic;  
using System.Linq;  
using System.Text;  
using Class_internal;  //引用命名空间  
  
namespace Test_internal  
{  
    class Program  
    {  
        static void Main(string[] args)  
        {  
            student stu = new student();  //实例化一个student类型  
            int Chinese = stu.Chinese;   //出错了,internal 保护类型无法在这个项目中访问  
            int Math = stu.Math;  //出错,同上  
            int English = stu.English;  // 成功访问public保护类型  
             
        }  
    }  
}
登录后复制

 我们在Class_internal中使用internal与public访问类型,在另一个项目Test_internal中只能访问到public访问类型。这就是internal

protected internal修饰符

                      Protected Internal 访问修饰符允许一个类将其成员变量和成员函数对同一应用程序内(项目)的子类以外的其他的类对象和函数进行隐藏。(不太明白) 换句话说就是同时拥有protected 与 internal的性质,protected访问限制在子类,能够在另一个程序集(项目)中通过继承方式访问到,internal是限制其他项目的访问,两个限制叠加,protected类型在另一个项目中不能通过继承的子类访问到。

 

以上就是C#学习日记21----封装 与 访问修饰符的内容,更多相关内容请关注PHP中文网(www.php.cn)!


本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

使用 C# 的活动目录 使用 C# 的活动目录 Sep 03, 2024 pm 03:33 PM

使用 C# 的 Active Directory 指南。在这里,我们讨论 Active Directory 在 C# 中的介绍和工作原理以及语法和示例。

C# 序列化 C# 序列化 Sep 03, 2024 pm 03:30 PM

C# 序列化指南。这里我们分别讨论C#序列化对象的介绍、步骤、工作原理和示例。

C# 中的随机数生成器 C# 中的随机数生成器 Sep 03, 2024 pm 03:34 PM

C# 随机数生成器指南。在这里,我们讨论随机数生成器的工作原理、伪随机数和安全数的概念。

C# 数据网格视图 C# 数据网格视图 Sep 03, 2024 pm 03:32 PM

C# 数据网格视图指南。在这里,我们讨论如何从 SQL 数据库或 Excel 文件加载和导出数据网格视图的示例。

C# 中的模式 C# 中的模式 Sep 03, 2024 pm 03:33 PM

C# 模式指南。在这里,我们讨论 C# 中模式的介绍和前 3 种类型,以及其示例和代码实现。

C# 中的质数 C# 中的质数 Sep 03, 2024 pm 03:35 PM

C# 素数指南。这里我们讨论c#中素数的介绍和示例以及代码实现。

C# 中的阶乘 C# 中的阶乘 Sep 03, 2024 pm 03:34 PM

C# 阶乘指南。这里我们讨论 C# 中阶乘的介绍以及不同的示例和代码实现。

c#多线程和异步的区别 c#多线程和异步的区别 Apr 03, 2025 pm 02:57 PM

多线程和异步的区别在于,多线程同时执行多个线程,而异步在不阻塞当前线程的情况下执行操作。多线程用于计算密集型任务,而异步用于用户交互操作。多线程的优势是提高计算性能,异步的优势是不阻塞 UI 线程。选择多线程还是异步取决于任务性质:计算密集型任务使用多线程,与外部资源交互且需要保持 UI 响应的任务使用异步。

See all articles