字典中的统一C#自定义类
所以,是的,我觉得问这个问题很愚蠢,但我目前正在编写一个简单的探路者脚本。我想用字典,比如字典中的统一C#自定义类,c#,dictionary,C#,Dictionary,所以,是的,我觉得问这个问题很愚蠢,但我目前正在编写一个简单的探路者脚本。我想用字典,比如 字典 其中floor是我引用的地砖,FloorInfo是自定义类,如下所示: public class FloorInfo { Floor lastFloor; float floorValue; public FloorInfo(Floor lastF, float val) { lastFloor = lastF; floo
字典
其中floor是我引用的地砖,FloorInfo是自定义类,如下所示:
public class FloorInfo
{
Floor lastFloor;
float floorValue;
public FloorInfo(Floor lastF, float val)
{
lastFloor = lastF;
floorValue = val;
} }
但在我创造了类似
FloorInfo info = new FloorInfo(current, F);
我无法获取值,例如info.val
或info.lastF
你能解释一下我做错了什么吗?我觉得很尴尬,因为我被这样的事情缠住了,或者超过了45分钟
编辑:好的,谢谢所有已经回答的人。似乎最明显的事情也会有相当大的问题。再次感谢你,祝你有愉快的一天 如果要从类外访问它们,则将其公开。如果要从类外访问它们,则将其公开。这是因为C#class'字段的访问修饰符(默认情况下)是
private
。上面所做的是尝试访问类
范围之外的私有
字段(这是不允许的)
要访问字段,请将其访问修饰符设置为公共
,然后您可以在类
范围之外访问它们:
public class FloorInfo
{
public Floor lastFloor; //note the public keyword
public float floorValue;
public FloorInfo(Floor lastF, float val)
{
lastFloor = lastF;
floorValue = val;
}
}
只需访问以下字段:
FloorInfo info = new FloorInfo(current, F);
info.lastFloor = new Floor();
info.floorValue = 45.0;
请注意,您不能从上面访问lastF
和val
,因为它们只是构造函数的参数。您可以访问类的字段,而不是其构造函数的参数
也就是说,作为属性
访问它们比作为字段
访问它们更为常见
public Floor lastFloor { get; set; }
public float floorValue { get; set; }
这是因为使用属性
,您可以在getter
和setter
中设置其他内容(例如检查属性的输入是否有效),这通常是一种更安全的设计:
const float floorValueLimit = 20.0;
private float pFloorValue;
public float floorValue {
get { return pFloorValue; }
set {
if (value <= floorValueLimit){ //check limit
pFloorValue = value;
} //else, don't update
}
}
这是因为C#class'字段的访问修饰符(默认情况下)是private
。上面所做的是尝试访问类
范围之外的私有
字段(这是不允许的)
要访问字段,请将其访问修饰符设置为公共
,然后您可以在类
范围之外访问它们:
public class FloorInfo
{
public Floor lastFloor; //note the public keyword
public float floorValue;
public FloorInfo(Floor lastF, float val)
{
lastFloor = lastF;
floorValue = val;
}
}
只需访问以下字段:
FloorInfo info = new FloorInfo(current, F);
info.lastFloor = new Floor();
info.floorValue = 45.0;
请注意,您不能从上面访问lastF
和val
,因为它们只是构造函数的参数。您可以访问类的字段,而不是其构造函数的参数
也就是说,作为属性
访问它们比作为字段
访问它们更为常见
public Floor lastFloor { get; set; }
public float floorValue { get; set; }
这是因为使用属性
,您可以在getter
和setter
中设置其他内容(例如检查属性的输入是否有效),这通常是一种更安全的设计:
const float floorValueLimit = 20.0;
private float pFloorValue;
public float floorValue {
get { return pFloorValue; }
set {
if (value <= floorValueLimit){ //check limit
pFloorValue = value;
} //else, don't update
}
}
lastF
和val
是构造函数的参数。一旦构造器完成,它们就消失了
您已将这些值复制到lastFloor和floorValue,但当前它们是私有的。你应该把这些公开。如果不指定修饰符,则默认情况下,修饰符是私有的,并且在所定义的类之外不可见
public class FloorInfo
{
public Floor lastFloor;
public float floorValue;
public FloorInfo(Floor lastF, float val)
{
lastFloor = lastF;
floorValue = val;
}
}
因此,您可以引用info.floorValue
和info.lastfool
如果您想要好的设计,那么您应该将这些设置为属性,并可能将设置为私有,以便它们不能在FloorInfo类之外更改。同时使属性以大写字母开头
public class FloorInfo
{
public Floor LastFloor { get; private set; }
public float FloorValue { get; private set; }
public FloorInfo(Floor lastF, float val)
{
lastFloor = lastF;
floorValue = val;
}
}
lastF
和val
是构造函数的参数。一旦构造器完成,它们就消失了
您已将这些值复制到lastFloor和floorValue,但当前它们是私有的。你应该把这些公开。如果不指定修饰符,则默认情况下,修饰符是私有的,并且在所定义的类之外不可见
public class FloorInfo
{
public Floor lastFloor;
public float floorValue;
public FloorInfo(Floor lastF, float val)
{
lastFloor = lastF;
floorValue = val;
}
}
因此,您可以引用info.floorValue
和info.lastfool
如果您想要好的设计,那么您应该将这些设置为属性,并可能将设置为私有,以便它们不能在FloorInfo类之外更改。同时使属性以大写字母开头
public class FloorInfo
{
public Floor LastFloor { get; private set; }
public float FloorValue { get; private set; }
public FloorInfo(Floor lastF, float val)
{
lastFloor = lastF;
floorValue = val;
}
}
您必须将字段lastFloot
和floorValue
标记为public,或者最好提供一个公共属性来访问这些私有字段,如下所示:
public class FloorInfo
{
private Floor m_lastFloor;
private float m_floorValue;
public Floor LastFloor {
get { return m_lastFloor; }
}
public float FloorValue {
get { return m_floorValue }
}
public FloorInfo(Floor lastF, float val)
{
m_lastFloor = lastF;
m_floorValue = val;
}
}
FloorInfo info = new FloorInfo(current, F);
float value = info.FloorValue;
然后您可以访问如下值:
public class FloorInfo
{
private Floor m_lastFloor;
private float m_floorValue;
public Floor LastFloor {
get { return m_lastFloor; }
}
public float FloorValue {
get { return m_floorValue }
}
public FloorInfo(Floor lastF, float val)
{
m_lastFloor = lastF;
m_floorValue = val;
}
}
FloorInfo info = new FloorInfo(current, F);
float value = info.FloorValue;
您必须将字段lastFloot
和floorValue
标记为public,或者最好提供一个公共属性来访问这些私有字段,如下所示:
public class FloorInfo
{
private Floor m_lastFloor;
private float m_floorValue;
public Floor LastFloor {
get { return m_lastFloor; }
}
public float FloorValue {
get { return m_floorValue }
}
public FloorInfo(Floor lastF, float val)
{
m_lastFloor = lastF;
m_floorValue = val;
}
}
FloorInfo info = new FloorInfo(current, F);
float value = info.FloorValue;
然后您可以访问如下值:
public class FloorInfo
{
private Floor m_lastFloor;
private float m_floorValue;
public Floor LastFloor {
get { return m_lastFloor; }
}
public float FloorValue {
get { return m_floorValue }
}
public FloorInfo(Floor lastF, float val)
{
m_lastFloor = lastF;
m_floorValue = val;
}
}
FloorInfo info = new FloorInfo(current, F);
float value = info.FloorValue;
您没有指定任何访问修饰符(private/protected/public
),因此默认情况下这些属性是private
,即从类外部无法访问。您没有指定任何访问修饰符(private/protected/public
),因此默认情况下这些属性是private
,也就是说,从类外部无法访问。简洁(and,IMHO更可读)结构是public Floor lastfool{get;private set;}
Terser(and,IMHO更可读)结构是public Floor lastfool{get;private set;}