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

时间:2011-05-26 07:38:56

标签: c# .net

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

感谢。

6 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

将类的范围作为内部 和方法范围为受保护的

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

答案 2 :(得分:0)

了解C# Protected Internal

  

受保护受保护的成员可在其类及其中访问   派生类。

     

内部内部类型或成员只能在其中访问   同一个程序集中的文件。

     

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

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

protected internal memberName(){ ... };

答案 3 :(得分:0)

确定!我想象你希望能够更灵活地控制汇编类的来源,以及派生什么类,而不是'internal'关键字。例如,如果您希望检查该对象是来自th-a-at程序集,并派生自其中一个e-e-ese类。

您可以通过类型
的Assembly.GetAssembly()方法来完成 http://msdn.microsoft.com/en-us/library/system.reflection.assembly.getassembly.aspx

以下是检查对象是否从另一个派生的方法 Check if a class is derived from a generic class

所以你可以检查你所需要的一切。

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

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");
    ...
}

答案 4 :(得分:0)

基类中将功能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
       }
    }
}

答案 5 :(得分:0)

我相信你可以这样做:

public class OriginalClass { ... }

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

这样,只有内部类可以看到DerivedClass,只有内部派生类可以看到其中的被保护成员。

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