C#无法将方法转换为非委托类型我有一个名为Pin的类。公共类Pin{私有字符串标题;publicPin(){}publicsetTitle(stringtitle){this.title=title;}publicStringgetTitle(){返回标题;从另一个类我在列表引脚Pins对象中添加,从另一个类我想迭代列表引脚并获取元素。所以我有这段代码。foreach(PinobjinClassListPin.pins){stringt=obj.getTitle;使用此代码,我无法检索标题。为什么?(注意:ClassListPin只是一个带有一些元素的静态类,其中一个是Listpin)方法调用后需要加上括号,否则编译器会认为你在谈论方法本身(委托类型),当你其实是在说方法的返回值。字符串t=obj.getTitle();其他非必要信息另外,请查看属性。这样您就可以将title用作变量,并且在内部,它就像一个函数。这样您就不必编写函数getTitle()和setTitle(stringvalue),但您可以这样做:publicstringTitle//注意:公共字段、方法和属性使用PascalCasing{get//这将替换您的getTitle方法{返回_title;//_title是某处的一个字段}set//这会替换您的setTitle方法{_title=value;//值的行为类似于方法参数}}或者您可以使用自动实现的属性,默认情况下会使用该属性:publicstringTitle{get;放;并且您不必创建自己的支持字段(_title),编译器会自行创建。此外,您还可以更改属性访问器(getter和setter)的访问级别:publicstringTitle{get;私有集;您使用属性就好像它们是字段一样,即:this.Title="Example";stringlocal=this.Title;getTitle是一个函数,所以需要在它后面加上()。字符串t=obj.getTitle();正如@Antonijn所说,您需要通过添加括号来执行getTitle方法:stringt=obj.getTitle();但我想补充一点,您正在使用C#进行Java编程。有一个属性的概念(成对的get和set方法),在这种情况下应该使用它:publicclassPin{privatestring_title;//你不需要定义空构造函数//publicPin(){}publicstringTitle{get{return_title;}设置{_title=值;更重要的是,在这种情况下,您不仅可以要求编译器生成get和set方法,还可以通过auto-inslemented属性来生成后端存储:publicclassPin{publicstringTitle{get;放;现在你不需要执行这个方法,因为这个属性就像一个字段一样被使用:foreach(PinobjinClassListPin.pins){stringt=obj.Title;}如前所述,您需要使用obj.getTile()但是,在这种情况下,我认为您希望使用该属性。公共类Pin{私有字符串标题;publicPin(){}publicsetTitle(stringtitle){this.title=title;}publicStringTitle{get{返回标题;这将允许您使用foreach(PinobjinClassListPin.pins){stringt=obj.Title;您可以将类代码简化为以下内容,它会按原样工作,但如果您希望示例工作,请在末尾添加括号:stringx=getTitle();publicclassPin{publicstringTitle{get;放;因为getTitle不是字符串,所以如果您没有显式调用该方法,它会返回对该方法的引用或委托(如果您愿意)。以这种方式调用您的方法:stringt=obj.getTitle();//obj.getTitle()表示返回标题字符串对象但是,这是可行的:Funcmethod=obj.getTitle;//thiscompilestoadelegateandpointstothemethodstrings=method();//调用委托或使用这种语法`method.Invoke();`要执行一个方法,你需要添加括号,即使方法不接受参数。所以应该是:以上是C#学习教程:C#无法将方法转换为非委托类型。如果对大家有用,需要详细了解C#学习教程,希望大家多多关注——stringt=obj.getTitle();本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
