我有一个名为Pin
的课程。
public class Pin
{
private string title;
public Pin() { }
public setTitle(string title) {
this.title = title;
}
public String getTitle()
{
return title;
}
}
从另一个类我在List<Pin>
引脚中添加Pins对象,从另一个类中我想迭代List引脚并获取元素。所以我有这个代码。
foreach (Pin obj in ClassListPin.pins)
{
string t = obj.getTitle;
}
使用此代码我无法检索标题。为什么?
(注意:ClassListPin
只是一个静态类,其中包含一些元素,其中一个是List<Pin>
引脚)
答案 0 :(得分:57)
您需要在方法调用后添加括号,否则编译器会认为您正在讨论方法本身(委托类型),而您实际上是在讨论该方法的返回值。
string t = obj.getTitle();
额外的非必要信息
另外,看看属性。这样你就可以使用title作为变量,而在内部,它就像一个函数。这样你就不必编写函数getTitle()
和setTitle(string value)
,但你可以这样做:
public string Title // Note: public fields, methods and properties use PascalCasing
{
get // This replaces your getTitle method
{
return _title; // Where _title is a field somewhere
}
set // And this replaces your setTitle method
{
_title = value; // value behaves like a method parameter
}
}
或者你可以使用自动实现的属性,默认情况下会使用它:
public string Title { get; set; }
您不必创建自己的支持字段(_title
),编译器会自己创建它。
此外,您可以更改属性访问者(getter和setter)的访问级别:
public string Title { get; private set; }
您使用属性就像它们是字段一样,即:
this.Title = "Example";
string local = this.Title;
答案 1 :(得分:7)
getTitle
是一个函数,因此您需要在其后放置()
。
string t = obj.getTitle();
答案 2 :(得分:7)
正如@Antonijn所述,您需要通过添加括号来执行 getTitle方法:
string t = obj.getTitle();
但我想补充一点,你在C#中进行Java编程。有properties(一对get和set方法)的概念,应该在这种情况下使用:
public class Pin
{
private string _title;
// you don't need to define empty constructor
// public Pin() { }
public string Title
{
get { return _title; }
set { _title = value; }
}
}
在这种情况下,您可以通过auto-impelemented property使用来询问编译器不仅可以生成get和set方法,还可以生成后台存储:
public class Pin
{
public string Title { get; set; }
}
现在你不需要执行方法,因为像字段一样使用了属性:
foreach (Pin obj in ClassListPin.pins)
{
string t = obj.Title;
}
答案 3 :(得分:5)
如上所述,您需要使用obj.getTile()
但是,在这种情况下,我认为您希望使用Property。
public class Pin
{
private string title;
public Pin() { }
public setTitle(string title) {
this.title = title;
}
public String Title
{
get { return title; }
}
}
这将允许您使用
foreach (Pin obj in ClassListPin.pins)
{
string t = obj.Title;
}
答案 4 :(得分:4)
您可以将您的类代码简化为以下内容,它将按原样运行,但如果您想让您的示例正常工作,请在末尾添加括号:string x = getTitle();
public class Pin
{
public string Title { get; set;}
}
答案 5 :(得分:3)
由于getTitle
不是string
,如果您没有明确调用delegate >方法。
以这种方式调用您的方法:
string t= obj.getTitle() ; //obj.getTitle() says return the title string object
然而,这可行:
Func<string> method = obj.getTitle; // this compiles to a delegate and points to the method
string s = method();//call the delegate or using this syntax `method.Invoke();`
答案 6 :(得分:2)
要执行一个方法,您需要添加括号,即使该方法不接受参数。
所以它应该是:
string t = obj.getTitle();