试图了解背后的原因。
场景#1
public class Customer
{
string _name = "Ram";
//now trying to assign some new value to _name on the next line
_name // this property is inaccessible on this line.
}
场景#2
public class BaseCustomer
{
protected string _name;
}
public class DerivedCustomer : BaseCustomer
{
_name //inaccessible here
public void SetName()
{
_name = "Shyam"; //accessible here
}
}
有人可以让我知道这背后的原因是什么?
答案 0 :(得分:3)
简单。您不能在类上下文中进行变量赋值(不带声明)。您需要使用构造函数将赋值放入:
public class DerivedCustomer : BaseCustomer
{
public DerivedCustomer()
{
_name = "hello";
}
...
}
......或者把它放在声明中:
public class BaseCustomer
{
protected string _name = "hello";
}
答案 1 :(得分:2)
注意:专家可能会发现我的简化说明有例外。为了解释OP的关键意图,我保持简单。
在某种程度上,一个类实际上只包含声明。这可以是一个字段:
public class Customer
{
private string _name;
}
或属性:
//Example 1 - Simple property
public class Customer
{
public string Name { get; set; }
}
//Example 2 - Publically gettable (but not settable) property with private field (which is settable)
public class Customer
{
private string _name; //this is a field
public string Name => _name; //this is a property that relies on the field
}
或方法:
public class Customer
{
public string GetName()
{
return "John";
}
}
将其归结,我将其总结如下:
类仅包含声明其结构的方式:字段,属性,方法。
类不直接包含代码(即使用字段/属性的逻辑)。
但是,类方法或属性可以包含代码(即使用字段/属性的逻辑),但此代码被视为部分方法/属性,不属于类(直接)。
你要做的事对我来说没有意义。通过尝试访问这些位置的_name
,我不太确定您希望实现的目标。
只有在您可以引用它的位置引用此字段才有意义:
但是你试图在课堂上加入 。这提出了许多问题:
_name
做什么?