示例中的属性或索引器有什么问题

本文关键字:什么 问题 索引 属性 | 更新日期: 2023-09-27 18:00:16

此处编码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
{
    class Program : iTest 
    {
        static void Main(string[] args)
        {
            Program pp = new Program();
            Console.ReadKey();
        }
        public void  FistName
        {
            get 
            { 
            }
            set 
            { 
            }
        }
        public void  LastName
        {
            get 
            { 
            }
            set 
            { 
            }
        }
        public string  changeName(string nameToBeChanged)
        {
           return null;
        }
    }
    interface iTest
    {
        public void FistName { get; set; }
        public void LastName { get; set; }
        public string changeName(string nameToBeChanged);
    }
}

错误代码:

Error   1   'FistName': property or indexer cannot have void type   ''state.sd.local'Home'IT'ITPR13266'Documents'Visual Studio 2010'Projects'ConsoleApplication10'ConsoleApplication10'Program.cs   16  22  ConsoleApplication10
Error   2   'LastName': property or indexer cannot have void type   ''state.sd.local'Home'IT'ITPR13266'Documents'Visual Studio 2010'Projects'ConsoleApplication10'ConsoleApplication10'Program.cs   28  22  ConsoleApplication10
Error   3   The modifier 'public' is not valid for this item    ''state.sd.local'Home'IT'ITPR13266'Documents'Visual Studio 2010'Projects'ConsoleApplication10'ConsoleApplication10'Program.cs   48  21  ConsoleApplication10
Error   4   'FistName': property or indexer cannot have void type   ''state.sd.local'Home'IT'ITPR13266'Documents'Visual Studio 2010'Projects'ConsoleApplication10'ConsoleApplication10'Program.cs   48  21  ConsoleApplication10
Error   5   The modifier 'public' is not valid for this item    ''state.sd.local'Home'IT'ITPR13266'Documents'Visual Studio 2010'Projects'ConsoleApplication10'ConsoleApplication10'Program.cs   49  21  ConsoleApplication10
Error   6   'LastName': property or indexer cannot have void type   ''state.sd.local'Home'IT'ITPR13266'Documents'Visual Studio 2010'Projects'ConsoleApplication10'ConsoleApplication10'Program.cs   49  21  ConsoleApplication10
Error   7   The modifier 'public' is not valid for this item    ''state.sd.local'Home'IT'ITPR13266'Documents'Visual Studio 2010'Projects'ConsoleApplication10'ConsoleApplication10'Program.cs   50  23  ConsoleApplication10

示例中的属性或索引器有什么问题

要使属性以标准方式正常工作,您需要删除{ },只放一个;,当您需要将业务逻辑实现到属性中时,您将使用括号并创建一个私有变量来设置和返回。

实现中的另一个错误:属性需要返回Type,因此不能是void。我想名字和姓氏都是string

在您的情况下,只需要对此进行更改:

public string FirstName
{
    get;
    set;
}
public string LastName
{
    get;
    set;
}

有一个创建属性的快捷方式:prop+TAB+TAB然后你写下类型,名字,就完成了。

正如其他人所指出的,getter必须有返回,或者您可以更改为auto属性:public string FirstName { get; set; }

在您的界面中使用public也会导致错误:

interface iTest
{
    public void FistName { get; set; }
    public void LastName { get; set; }
    public string changeName(string nameToBeChanged);
}

将其更改为:

interface iTest
{
    string FistName { get; set; }
    string LastName { get; set; }
    string changeName(string nameToBeChanged);
}

请注意,接口总是有公共成员,所以没有必要指定它(正如您所看到的,实际上无法指定它!)。正如Lucas在评论中指出的那样,你不可能拥有void FirstName { get; set; }。语法是string FirstName { get; set; },假设您在这里想要一个string

问题1:您已将void声明为属性的返回类型。它不是属性的有效返回类型。因此,您应该声明正确的返回类型以使其正常工作。

解决方案1:我认为您的属性类型为string,因此指定string作为属性的返回类型。

问题2:您正在创建auto implemented properties,因此在getset之后应该有分号;

来自MSDN:Auto Implemented Properties

自动实现的属性使属性声明更加简洁当属性访问器中不需要额外的逻辑时。

解决方案2:您需要在getset 之后添加分号

试试这个:

public string  FistName{ get; set;}
public string  LastName{ get; set;}