标签: protected

C#set accessor可供程序集中的所有类型访问,并且仅将评估者提供给派生类型.如何?

此属性在没有访问修饰符的类型中(因此internal访问):

class SomeType {
    private int length;
    internal int Length {
        get { return length; }
        set length = value; }
    }
}
Run Code Online (Sandbox Code Playgroud)

允许使用SomeType程序集中的所有类型getset访问器.问题:如何限制访问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)

c# properties protected internal accessor

4
推荐指数
1
解决办法
2559
查看次数

NHibernate可以设置非公共属性吗?

是否可以设置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访问器的访问吗?如果是这样我应该将它设置为什么?私人,受保护,内部,受保护的内部?

c# nhibernate private protected

4
推荐指数
1
解决办法
1384
查看次数

找出方法是受保护还是公开

使用此代码,我试图测试是否可以调用某些函数

if (method_exists($this, $method))
    $this->$method();
Run Code Online (Sandbox Code Playgroud)

但是现在我希望能够限制执行,如果$方法受到保护,我还需要做什么?

php protected public-method

4
推荐指数
1
解决办法
707
查看次数

为什么我不使用"受保护"的工作?

我已经读过可以从派生类访问受保护的成员,但以下内容不起作用.

class A
{
    protected int Test;
}
class B:A
{
    A instanceOfA= new A()

    public B()
    {
        instanceOfA.Test //Not possible
    }
}
Run Code Online (Sandbox Code Playgroud)

c# protected

4
推荐指数
1
解决办法
570
查看次数

StyleCop Madness:受保护的领域

我尽可能地让其他人的代码符合一些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

c# inheritance stylecop protected

4
推荐指数
2
解决办法
5946
查看次数

检查和编辑对象的私有/受保护属性

在MATLAB 2011b中,我有一些类具有许多私有或受保护的类属性.这是设计的,因为我不希望这些可以通过除了我自己的getter/setter以外的任何东西来查看,读取,写入等.

但是,在开发过程中,有时我想看看这些属性的状态.可以在工作空间中检查类对象,但是当我通过双击工作空间中的对象来访问" 变量编辑器"工具时,没有任何私有/受保护属性可见.

我可以理解这可能是设计,但我希望有一个我错过的设置让我查看它们.

oop matlab private protected

4
推荐指数
1
解决办法
1430
查看次数

如果@protected是默认值,为什么这个ivar需要@protected?

@interface AClass : SomeType {
@protected
    NSMutableArray* amINotAlreadyProtected; //?
}
Run Code Online (Sandbox Code Playgroud)

为什么这个代码需要@protected,如果@protected是默认?这段代码是由一位非常有经验的程序员编写的,但我自己会省略说明符.

visibility interface protected objective-c instance-variables

4
推荐指数
1
解决办法
2815
查看次数

基类中受保护的非虚拟析构函数

我试图了解虚拟析构函数.以下是此页面的复制粘贴何时使用虚拟析构函数?

在这里,您会注意到我没有声明Base的析构函数是虚拟的.现在,我们来看看以下代码段:

Base *b = new Derived(); // use b 
delete b; // Here's the problem!
Run Code Online (Sandbox Code Playgroud)

[...]如果要防止通过基类指针删除实例,可以使基类析构函数受保护且非虚拟; 通过这样做,编译器将不允许您在基类指针上调用delete.

我不明白为什么通过拥有受保护的非虚基类析构函数来防止删除.编译器是否认为我们试图delete从基类对象调用?什么是protected有,这样做?

c++ protected virtual-destructor

4
推荐指数
2
解决办法
4892
查看次数

使用wget从受密码保护的链接下载文件

我正在尝试使用wget从受密码保护的http链接下载文件.我使用以下语法:

wget --http-user = user --http-password = xxxxxx http:// ......

我使用正确的语法吗?用户和密码是否应该用引号或双引号括起来?

unix passwords wget protected download

4
推荐指数
1
解决办法
7108
查看次数

为什么这个受保护的成员在子类中不可见

我有一个问题,了解受保护的成员继承和可见性.

我知道它在同一个包和子类中是可见的.

但是在下面的代码中,它在子类中是不可见的.

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)

java inheritance protected

4
推荐指数
1
解决办法
474
查看次数