这是另一个我想要解释的问题。在第47行,我收到错误说:
错误CS0122:由于其保护级别(CS0122),“属性名称”无法访问
问题是为什么会出现错误,我该如何避免这种情况?如果我正确地做这个功课。如果我应该调用属性或变量?我的猜测是属性。
PS。代码尚未完成。
请注意!我的教授给了我们一个类图,告诉我们应该使用哪些属性,哪些应该具有get / set以及哪些属性设置。
代码问题:
public void display()
{
Console.Write("{0}\n{1}\n{2}\n{3}", Title, getAuthorName(), PublisherName, Price);
}
整个代码:
using System;
namespace Lab_3
{
class BookTest
{
static void Main(string[] args)
{
Book book1 = new Book();
Book book2 = new Book("Advenced C#", "Joe", "Robertson", 29.99f, "PUC Press");
}
}
public class Book
{
string authorFirstName;
string authorLastName;
float price;
string publisherName;
string title;
public Book()
{
Console.Write("Enter book title: ");
Title = Console.ReadLine();
Console.Write("Enter author's first name: ");
AuthorFirstName = Console.ReadLine();
Console.Write("Enter author's last name: ");
AuthorLastName = Console.ReadLine();
Console.Write("Enter price: ");
Price = float.Parse(Console.ReadLine());
Console.Write("Enter publisher's name: ");
PublisherName = Console.ReadLine();
}
public Book(string bookTitle, string firstName, string lastName, float bookPrice, string publisher)
{
authorFirstName = firstName;
authorLastName = lastName;
price = bookPrice;
publisherName = publisher;
title = bookTitle;
}
public void display()
{
Console.Write("{0}\n{1}\n{2}\n{3}", Title, getAuthorName, PublisherName, Price);
}
public string getAuthorName()
{
return AuthorFirstName + AuthorLastName;
}
public string AuthorFirstName
{
get
{
return authorFirstName;
}
set
{
authorFirstName = value;
}
}
public string AuthorLastName
{
get
{
return authorLastName;
}
set
{
authorLastName = value;
}
}
public float Price
{
set
{
price = value;
}
}
public string PublisherName
{
set
{
publisherName = value;
}
}
public string Title
{
set
{
title = value;
}
}
}
}
编辑:解决了!谢谢大家的帮助。
总之,我不能使用属性,因为有些是READ-ONLY导致我的问题。所以我需要使用私有变量来显示它们。
答案 0 :(得分:2)
问题是您的属性缺少getter
,即
public string Title
{
set
{
title = value;
}
get
{
return title;
}
}
编辑:您的display()
方法应如下所示:
public void display()
{
Console.Write("{0}\n{1}\n{2}\n{3}", title, getAuthorName(), publisherName, price);
}
请注意调用arg#3的getAuthorName()
方法。
答案 1 :(得分:2)
由于你在使用属性的方法display()
所在的类中,只需使用数据成员本身,因为这可能是你教授想要的。属性用于向您的类的用户公开数据。在您的课程中,您可以自由使用数据成员而无需getter或setter:
Console.Write("{0}\n{1}\n{2}\n{3}", title, getAuthorName(), publisherName, price);
答案 2 :(得分:1)
Price,PublisherName和Title没有getter,只有setter。
public string Title { private get; set; } // Private getter, public setter
public string Title { set { title=value; }} // No getter, access...
public void Display() { Console.WriteLine(title); }//not Title, use lowercase member variable
答案 3 :(得分:-1)
它不起作用的原因是因为属性Price,PublisherName和Title没有getter,它们只有setter。也许他要求将这些属性设为只读,而不是只写?