修饰符-访问修饰符internal sealed

摘自:internal(C# 参考)
摘自:sealed(C# 参考)

Internal:访问仅限于当前程序集。
protected internal:访问限制到当前程序集或从包含派生的类型的类别。

程序集就是代码编译后bin目录下生产的.exe或者.dll文件,就等同于一个项目一个程序集。

/*项目ConsoleApp1*/
using ConsoleApp1_2;
using ConsoleApp1_3;
using ConsoleApp2_2;
using ConsoleApp2_3;

namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
        	var test1 = new TestInternal1();//不同命名空间,同一个项目
            var test2 = new TestInternal2();
            //var test3 = new TestInternal3();//不可访问,因为具有一定保护级别internal
            var test4 = new TestInternal4();

            test1.Name = "Ann";
            test2.Name = "Bob";
            //test4.Name = "Sum";//不可访问,因为具有一定保护级别internal
            Console.WriteLine(test1.Name + "  " + test2.Name);
            Console.ReadKey();
        }
    }
}

namespace ConsoleApp1_2
{
    internal class TestInternal1
    {
        public string Name { get; set; }
        public string Address { get; set; }
    }
}

namespace ConsoleApp1_3
{
    public class TestInternal2
    {
        internal string Name { get; set; }
        internal string Address { get; set; }
    }
}
/*项目ConsoleApp2*/
namespace ConsoleApp2_2
{
    internal class TestInternal3
    {
        public string Name { get; set; }
        public string Address { get; set; }
    }
}

namespace ConsoleApp2_3
{
    public class TestInternal4
    {
        internal string Name { get; set; }
        internal string Address { get; set; }
    }
}

应用于某个类时,sealed 修饰符可阻止其他类继承自该类。 在下面的示例中,类 B 继承自类 A,但没有类可以继承自类 B。

class A {}
sealed class B : A {}

在下面的示例中,Z 继承自 Y,但 Z 无法替代在 X 中声明并在 Y 中密封的虚函数 F。

class X
{
    protected virtual void F() { Console.WriteLine("X.F"); }
    protected virtual void F2() { Console.WriteLine("X.F2"); }
}

class Y : X
{
    sealed protected override void F() { Console.WriteLine("Y.F"); }
    protected override void F2() { Console.WriteLine("Y.F2"); }
}

class Z : Y
{
    // Attempting to override F causes compiler error CS0239.
    // protected override void F() { Console.WriteLine("Z.F"); }

    // Overriding F2 is allowed.
    protected override void F2() { Console.WriteLine("Z.F2"); }
}

应用于方法或属性时,sealed 修饰符必须始终与 override 结合使用。
因为结构是隐式密封的,所以无法继承它们。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值