【问题标题】:How to make private property accessible in MVC3如何在 MVC3 中访问私有属性
【发布时间】:2012-04-29 13:33:24
【问题描述】:

我正在使用 Mvc3 和 NHibernate 我有一个名为 Activation code 的类,如下所示:

public virtual int LoginAccountId { get; set; }
protected virtual string ActivatedCode { get; set; }
protected virtual DateTime ActivationDate { get; set; }

我想在控制器中访问此字段

ActivationCode code=new ActivationCode();
code.ActivatedCode="abc";

但无法得到它。为什么?

【问题讨论】:

    标签: c# .net asp.net-mvc-3 protected access-specifier


    【解决方案1】:

    您不能从包含它们的类外部或派生类访问受保护的成员。如果您不更改成员的可见性,那么从 ActivationCode 类外部访问它的唯一方法是使用反射,但这绝对是可怕的。我建议将其公开或公开允许您修改其值的公共方法。

    【讨论】:

    • :那么我怎样才能让它们可以访问呢?你能告诉我吗?
    • 你还有其他方法可以做到这一点....比如使用私有而不是保护或类似的总和?
    【解决方案2】:

    该属性是protected,这意味着您只能从类内部或它的一个继承内部访问它。

    public class ActivationCode{
        public virtual int LoginAccountId { get; set; }
        protected virtual string ActivatedCode { get; set; }
        protected virtual DateTime ActivationDate { get; set; }
        
        public void Foo(){
            var x = this.ActivatedCode; // Valid
        }
    

    }

    public class Foo{
        new ActivationCode().ActivatedCode //Invalid access
    }
    

    您可以将属性从protected 更改为public,就像LoginAccountId 一样。

    阅读MSDN关于protected的文章:

    protected 关键字是成员访问修饰符。受保护的成员可以从声明它的类中访问,也可以从从声明该成员的类派生的任何类中访问。

    只有通过派生类类型进行访问时,才能在派生类中访问基类的受保护成员。例如,考虑以下代码段:

    更新:

    ActivationCode 类应如下所示:

    public class ActivationCode
    {
        public virtual int LoginAccountId { get; set; }
        public virtual string ActivatedCode { get; set; }
        public virtual DateTime ActivationDate { get; set; }
    }
    

    【讨论】:

    • 那么我怎样才能使它们易于访问?你能告诉我吗?
    • @priya77。我做到了,从protected 更改为public
    猜你喜欢
    • 1970-01-01
    • 2012-07-02
    • 1970-01-01
    • 2014-08-17
    • 2020-09-05
    • 2014-11-21
    • 2013-05-28
    • 2012-02-28
    • 1970-01-01
    相关资源
    最近更新 更多