2013-09-05 57 views
0

我有一个派生(说B)类,其中我想访问基类的一些属性(说A),但不是所有的属性的基类。例如。我有5个属性,说我想继承派生类的基类中的名称,年龄,名称,位置和薪水。但是,我想接取所有的财产接受的基类的“工资”属性(薪水属性不应由派生类B.访问我将如何实现这一目标提前如何限制派生类访问C#中基类的属性之一

感谢。

+0

通过* access *,您的意思是*写信给*? –

+4

它是私有的? –

+0

如何使用'protected'? – ALZ

回答

4
public class Employee 
{ 
    public double Salary { get; private set; } 
} 

假设:

  • 你想要的属性被大家
  • 是可读的,你不希望子类能写Salary

但是,如果您希望外部类写入Salary而不是Employee的子类,那么这是不可能的。子类将至少具有至少作为外部类的特权。

如果你不希望任何人能够读取/写入该属性(除Employee类),那么就让它私有,像这样

public class Employee 
{ 
    private double Salary { get; set; } 
} 
+0

我可以想象一个_terribly terrible_“选项”,您可以在分析调用堆栈的属性上使用公共setter。如果callstack显示写入来自派生类,它将忽略或抛出一个异常,并从其他外部类中允许它。 (和方法内联会把它扔出窗口)编辑:或者也许你可以分析调用者信息属性,如果它被重写为一种方法(不知道你是否可以在属性上使用它们) –

0

马克这个属性为私营:

class A 
{ 
    protected string Name { get; set; } 
    ... 
    private string Salary { get; set; } // derived classes has no access now 
} 
相关问题