如何指定只能从同一程序集的派生类访问的方法

本文关键字:派生 访问 方法 程序集 何指定 | 更新日期: 2023-09-27 17:57:46

C#中是否有任何方法可以指定一个方法,该方法只能从同一程序集的派生类访问,而不使用internal访问修饰符?

谢谢。

如何指定只能从同一程序集的派生类访问的方法

您必须同时指定内部和受保护。

将类的作用域指定为内部以及受保护的方法范围

Internal class Myclass
{
    Protected void MyMethod()
    {
        //Do something
    }
}

了解受C#保护的内部

protected受保护的成员可以在其类中通过派生类。

内部内部类型或成员只能在同一部件中的文件。

受保护的内部访问仅限于当前程序集或从包含派生的类型班*protected internal是唯一允许的访问修饰符组合对于成员或类型。

所以你需要使用internal关键词:

protected internal memberName(){ ... };

我相信你可以做这样的事情:

public class OriginalClass { ... }
internal class DerivedClass: OriginalClass
{
    protected void MemberName() { ... }
}

这样,只有内部类才能看到DerivedClass,只有内部派生类才能看到其中的预测成员

而且,您仍然可以从任何地方访问OriginalClass

好!我想象的情况是,与使用"internal"关键字相比,您希望更灵活地控制程序集类来自什么以及派生自什么类。例如,如果您希望检查对象是否来自th-a-at程序集并派生自-e-e-ese类之一。

您可以通过
类型的Assembly.GetAssembly()方法执行此操作http://msdn.microsoft.com/en-us/library/system.reflection.assembly.getassembly.aspx

这里是检查对象是否从另一个派生的方法
检查类是否派生自通用类

这样你就可以检查所有你需要的东西。

然后你可以实现类似的东西:

public static bool CheckTypeIsCorrect(Type t)
{
    if(t.GetAssembly().FullName != AssemblyYouNeed) return false;
    if(!(check anything you want in the class)) return false;
    return true;
}
...
public void YourMethod(object value)
{
    if(!CheckTypeIsCorrect(typeof(value))) 
        throw ArgumentException("Type of the object is not correct");
    ...
}

基类中将函数Access modifier设为Protected。像下面的

protected void YourFunctionName()
{
//This will be accessible in your derived class only.
}

可以从声明受保护成员的类内部以及从声明该成员的类派生的任何类内部访问受保护成员。

只有通过派生类类型进行访问时,基类的受保护成员才能在派生类中访问。

下面是MSDN中的一个示例

namespace SameAssembly
{
    public class A 
    {
       protected void abc()
       {
       }
    }
    private class B : A 
    {
       void F() 
       {
          A a = new A();  
          B b = new B();  
          a.abc();   // Error
          b.abc();   // OK
       }
    }
}