从Java转C#:模拟Java式getter为何未返回预期值?
问题原因及解决方法
问题根源
你在Main方法中调用getName时没有加括号():
Console.WriteLine(alex.getName);
在C#中,不带括号的方法名代表的是方法本身的引用(此处为Func<string>类型的委托),而非执行方法后的返回值。Console.WriteLine会输出这个委托类型的全称,也就是你看到的System.Func1[System.String]`。
解决方法
给getName加上括号,明确执行方法并获取返回值:
Person alex = new Person(); alex.setName("alex"); Console.WriteLine(alex.getName()); // 添加()执行方法
修改后就能输出预期的alex。
额外建议:使用C#风格的属性
从Java转C#,更推荐使用C#原生的属性语法替代Java风格的get/set方法,代码更简洁且符合语言习惯:
internal class Person { // 自动实现属性,编译器会自动生成背后的字段 internal string Name { get; set; } }
使用方式也更直观:
Person alex = new Person(); alex.Name = "alex"; Console.WriteLine(alex.Name);
内容的提问来源于stack exchange,提问作者Alexandru Manole
相关产品推荐
相关产品推荐

