C# 父类的受保护属性

C# 父类的受保护属性,c#,C#,我正在使用一个名为“contributable”的父类属性,然后在执行期间调用了一个名为“contributablemoral”的派生类,但在我看来它出现在null派生类方法中 public class contribuable { protected string MATRICULE_FISCALE; public contribuable(string _matricule_fiscale) { this.MATRICULE_FISCALE = _m

我正在使用一个名为“contributable”的父类属性,然后在执行期间调用了一个名为“contributablemoral”的派生类,但在我看来它出现在null派生类方法中

public class contribuable
{
    protected string MATRICULE_FISCALE;

    public contribuable(string _matricule_fiscale)
    {
        this.MATRICULE_FISCALE = _matricule_fiscale; //example MATRICULE_FISCALE=123456789
    }

    public void insertContribuable()
    {
        string sql = "insert into CLIENT(MATRICULE_FISCALE)values('" +this.MATRICULE_FISCALE +"')"; //MATRICULE_FISCALE=123456789
    }
}
}

class ContribuableMoral : contribuable
{
    public ContribuableMoral()
    {
    }

    public void InsertionMorale()
    {
        string sqlMorale = "insert into CLIENT_MORALE(MATRICULE_FISCALE) values('" + MATRICULE_FISCALE + "')"; //MATRICULE_FISCALE=null
    }
}

通常情况下,类可以被调用到派生类?

好吧,这样的代码一开始不会编译。。 但问题是派生类没有传递_matricule_fiscale的基类构造函数。 添加构造函数:

public ContribuableMoral(string _matricule_fiscale) : base (_matricule_fiscale) { }

您应该为在父类中传递的构造函数提供一个参数,例如:

public ContribuableMoral(string _matricule_fiscale) : base(_matricule_fiscale)
然后它会工作,还有一些其他错误

以下类别固定:

public class contribuable
{
    protected string MATRICULE_FISCALE;

    public contribuable(string _matricule_fiscale)
    {
        this.MATRICULE_FISCALE = _matricule_fiscale; //example MATRICULE_FISCALE=123456789}

    }
    public void insertContribuable()
    {
        string sql = "insert into CLIENT(MATRICULE_FISCALE)values('" + this.MATRICULE_FISCALE + "')";
        //MATRICULE_FISCALE=123456789
    }
}

internal class ContribuableMoral : contribuable
{
    public ContribuableMoral(string _matricule_fiscale) : base(_matricule_fiscale)
    {
    }

    public void InsertionMorale()
    {
        string sqlMorale = "insert into CLIENT_MORALE(MATRICULE_FISCALE) values('" + MATRICULE_FISCALE + "')";
        //MATRICULE_FISCALE=null
    }
}
要称此为使用:

var c = new ContribuableMoral("123456789");
c.InsertionMorale();

之所以发生这种情况,是因为您的
Contribuable
参数化构造函数不是从
Contribuable
调用的

它应该是:

class ContribuableMoral : Contribuable 
{
    public ContribuableMoral() : base("somestring")
    {
    }    

注意1:请检查以下代码样式,并以类似的方式格式化代码,以便其他人理解您

public class Contribuable
{
    protected string MatriculeFiscale { get; }

    public Contribuable(string matriculeFiscale)
    {
        MatriculeFiscale = matriculeFiscale; 
    }

    public void InsertContribuable()
    {
        string sql = "insert into CLIENT(MATRICULE_FISCALE)values('" + MatriculeFiscale  +"')";
    }   
}

class ContribuableMoral : Contribuable 
{
    public ContribuableMoral(string matriculeFiscale) : base(matriculeFiscale)
    {
    }

    public void InsertionMorale()
    {
        string sqlMorale = "insert into CLIENT_MORALE(MATRICULE_FISCALE) values('" + MatriculeFiscale + "')";
    }
}

注意2:您的代码现在容易受到SQL注入的攻击。不要使用字符串连接来生成SQL查询。

调试器会怎么说?错误是什么?如此糟糕的代码装饰:小写的类名,没有水平缩进,没有垂直间距,随机放置的大括号。除了SQL注入之外,由于字符串串接,还有易受攻击的代码。@YeldarKurmangaliyev我怀疑这是错误的根源。.这些代码甚至无法编译。。缺少背景,括号在错误的地方,等等。你必须处理你的格式。现在,我已经为你做了,但这是一个无法理解的混乱。
public class Contribuable
{
    protected string MatriculeFiscale { get; }

    public Contribuable(string matriculeFiscale)
    {
        MatriculeFiscale = matriculeFiscale; 
    }

    public void InsertContribuable()
    {
        string sql = "insert into CLIENT(MATRICULE_FISCALE)values('" + MatriculeFiscale  +"')";
    }   
}

class ContribuableMoral : Contribuable 
{
    public ContribuableMoral(string matriculeFiscale) : base(matriculeFiscale)
    {
    }

    public void InsertionMorale()
    {
        string sqlMorale = "insert into CLIENT_MORALE(MATRICULE_FISCALE) values('" + MatriculeFiscale + "')";
    }
}