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

时间:2014-04-25 17:56:19

标签: c#

代码在这里:

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

3 个答案:

答案 0 :(得分:3)

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

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

在您的情况下,只需要更改为:

public string FirstName
{
    get;
    set;
}

public string LastName
{
    get;
    set;
}

创建属性有一个快捷方式:prop + TAB + TAB 然后你写下类型,名称和它已经完成。

答案 1 :(得分:0)

问题1:您已将void声明为您的媒体资源的返回类型。它不是属性的有效返回类型。所以你应该声明正确的返回类型以使其正常运行。

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

问题2:您正在创建auto implemented properties,因此您应该在;get之后使用分号set

来自MSDN:Auto Implemented Properties

  

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

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

试试这个:

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

答案 2 :(得分:0)

正如其他人所指出的那样,你的吸气者必须有回报,或者你可以改为自动属性: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);
}

请注意,接口始终具有公共成员,因此无需指定(并且正如您所见,您实际上无法指定它!)。正如卢卡斯在评论中指出的那样,你不能拥有void FirstName { get; set; }。语法为string FirstName { get; set; },假设您在此处需要string