我刚刚开始学习c#,而且我对getter和setter的简写有点挣扎.
据我了解,下面的两种方法是等效的.它是否正确?
//Method 1
public string name { get; set; }
//Method 2
private string name
public string getName() { return name;}
public string setName(string newName) { this.name = newName; }
Run Code Online (Sandbox Code Playgroud)
其次,如果我们想要在getter/setter和实例变量上使用不同的访问修饰符,这是如何工作的.以下代码错误,告诉我访问者必须比属性更具限制性,并且我无法为烦恼访问器指定修饰符.有人可以澄清一下吗?
private int maxTime { public get; public set; }
Run Code Online (Sandbox Code Playgroud)
编辑:澄清一下,我没有具体的目标,只有理解.我不明白这个简写符号是做什么的.在其他语言中,我有私有实例变量,并使用公共getter和setter来管理这些实例变量.如果我自己写出方法,它就允许这样做,但不能用这个简写符号.为什么是这样?
编辑2:检查我的理解的最后一个问题.下面的两个代码片段都使用属性来管理maxTime变量.两者之间的唯一区别是风格.它是否正确?
private int maxTime;
public int MaxTime{ get; set; }
Run Code Online (Sandbox Code Playgroud)
VS
private int maxTime;
public int MaxTime
{
get { return maxTime; }
set { maxTime= value; }
}
Run Code Online (Sandbox Code Playgroud) 我一直在阅读这篇MSDN文章和这个问题,试图理解.NET中的事件.不幸的是,它没有点击我,我遇到了很多麻烦.我正在尝试将这项技术整合到我的项目中,但收效甚微.
基本上,我有这个类会读数字.每当遇到一个新号码时,我希望它触发一个名为numberChanged的事件.
所以,我设置了我的活动public event EventHandler numberChanged;.稍后,当我遇到一个与前一个数字不同的数字时,我会触发它.
if(currentNumber != previousNumber){
if(numberChanged != null){
numberChanged(this, new EventArgs());
}
}
Run Code Online (Sandbox Code Playgroud)
但后来我遇到了麻烦'subcibing'这个事件.如果我这样做numberChanged += [something to do here]错误,说numberChanged是一个事件而不是一个类型.
我的解释是否足够明确,可以提供一些建议?非常感谢.
我在添加从Entry框中获取的值并将其添加到现有数字时遇到了一些麻烦.在这种情况下,我希望将"更改速度"框的值添加到机器人当前速度.运行时,我的代码会产生错误:
TypeError:+ =:'int'和'IntVar'的不支持的操作数类型.
下面是生成输入框的代码:
change_speed_entry = ttk.Entry(main_frame, width=5) # Entry box for linear speed
change_speed_entry.grid()
data = tkinter.IntVar()
change_speed_entry['textvariable'] = data
Run Code Online (Sandbox Code Playgroud)
接下来是我试图操纵结果的地方.这是一个类中的方法.该类的所有其他方法都能正常工作:
def changeSpeed(self, delta_speed):
self.speed += delta_speed
Run Code Online (Sandbox Code Playgroud)