此属性在没有访问修饰符的类型中(因此internal访问):
class SomeType {
private int length;
internal int Length {
get { return length; }
set length = value; }
}
}
Run Code Online (Sandbox Code Playgroud)
允许使用SomeType程序集中的所有类型get和set访问器.问题:如何限制访问set到只有从SOMETYPE(和SOMETYPE确实)派生类型?
internal int Length {
get { return length; }
protected set length = value; }
}
Run Code Online (Sandbox Code Playgroud)
是由编译器拒绝,因为protected被认为是不是限制性更少internal(假定:protected有一个交叉点与internal,但不完全包括在internal- >派生类型可以存在超出的范围internal).
可以通过程序集中的任何类型访问的代码是什么,并且只能通过程序集中的派生类型进行设置?
编辑:查看答案后,我想我需要添加属性的另一特征,因为它可能使溶液中的一个区别:属性的类型实际上是SomeType.编辑后的代码是:
class …Run Code Online (Sandbox Code Playgroud) 是否可以设置NHibernate来加载/持久化类的非公共属性?例如,我可能有一个Item类,如下所示.
public class Item
{
public int ItemID {get; set;}
public string Name{get; set;}
}
Run Code Online (Sandbox Code Playgroud)
使用以下映射:
<class name="RCL.Item" table="Items">
<id name="ItemID" type="Int32" column="ItemID">
<generator class="native"/>
</id>
<property name="Author" />
</class>
Run Code Online (Sandbox Code Playgroud)
但是我真的不希望我的Item类的使用者能够更改ItemID字段.我可以限制对ItemID的set访问器的访问吗?如果是这样我应该将它设置为什么?私人,受保护,内部,受保护的内部?
使用此代码,我试图测试是否可以调用某些函数
if (method_exists($this, $method))
$this->$method();
Run Code Online (Sandbox Code Playgroud)
但是现在我希望能够限制执行,如果$方法受到保护,我还需要做什么?
我已经读过可以从派生类访问受保护的成员,但以下内容不起作用.
class A
{
protected int Test;
}
class B:A
{
A instanceOfA= new A()
public B()
{
instanceOfA.Test //Not possible
}
}
Run Code Online (Sandbox Code Playgroud) 我尽可能地让其他人的代码符合一些StyleCop规则集.现在我想知道以下情况:
我有一个包含字段的抽象类
protected double[] coefficients;
Run Code Online (Sandbox Code Playgroud)
Stylecop说:SA1401:必须使用私人访问声明字段.使用属性公开字段.
所以我改成了:
protected double[] coefficients { get; set; }
Run Code Online (Sandbox Code Playgroud)
Stylecop说:SA1300:属性名称以大写字母开头:系数.
由于它是一个抽象类,因此子类无法控制.他们使用他们父母的课堂base.coefficients......好吧.
那么......除了压制(或禁用)它之外没有别的办法摆脱这个警告吧?:T
在MATLAB 2011b中,我有一些类具有许多私有或受保护的类属性.这是设计的,因为我不希望这些可以通过除了我自己的getter/setter以外的任何东西来查看,读取,写入等.
但是,在开发过程中,有时我想看看这些属性的状态.可以在工作空间中检查类对象,但是当我通过双击工作空间中的对象来访问" 变量编辑器"工具时,没有任何私有/受保护属性可见.
我可以理解这可能是设计,但我希望有一个我错过的设置让我查看它们.
@interface AClass : SomeType {
@protected
NSMutableArray* amINotAlreadyProtected; //?
}
Run Code Online (Sandbox Code Playgroud)
为什么这个代码需要@protected,如果@protected是默认?这段代码是由一位非常有经验的程序员编写的,但我自己会省略说明符.
visibility interface protected objective-c instance-variables
我试图了解虚拟析构函数.以下是此页面的复制粘贴何时使用虚拟析构函数?
在这里,您会注意到我没有声明Base的析构函数是虚拟的.现在,我们来看看以下代码段:
Run Code Online (Sandbox Code Playgroud)Base *b = new Derived(); // use b delete b; // Here's the problem![...]如果要防止通过基类指针删除实例,可以使基类析构函数受保护且非虚拟; 通过这样做,编译器将不允许您在基类指针上调用delete.
我不明白为什么通过拥有受保护的非虚基类析构函数来防止删除.编译器是否认为我们试图delete从基类对象调用?什么是protected有,这样做?
我正在尝试使用wget从受密码保护的http链接下载文件.我使用以下语法:
wget --http-user = user --http-password = xxxxxx http:// ......
我使用正确的语法吗?用户和密码是否应该用引号或双引号括起来?
我有一个问题,了解受保护的成员继承和可见性.
我知道它在同一个包和子类中是可见的.
但是在下面的代码中,它在子类中是不可见的.
A.java
package a;
public class A {
public static void main(String[] args) {
}
protected void run() {
}
}
Run Code Online (Sandbox Code Playgroud)
B.java
package b;
import a.A;
public class B extends A {
public static void main(String[] args) {
B b = new B();
b.run(); // this works fine
}
}
Run Code Online (Sandbox Code Playgroud)
C.java
package b;
import a.A;
public class C extends A{ // it will not work also if extends B
public static void main(String[] args) {
B b = …Run Code Online (Sandbox Code Playgroud) protected ×10
c# ×4
inheritance ×2
private ×2
accessor ×1
c++ ×1
download ×1
interface ×1
internal ×1
java ×1
matlab ×1
nhibernate ×1
objective-c ×1
oop ×1
passwords ×1
php ×1
properties ×1
stylecop ×1
unix ×1
visibility ×1
wget ×1