如何访问子类的 属性
How to access property of a subclass
我有 1 个摘要 class 'Book' 和 2 个子classes 'Comic' 和 'Novel' 从第一个摘要 class 扩展而来。
在主要方法中,我必须创建书籍数组来存储漫画和小说的实例。
我的问题是我不知道如何访问 class 'Comic' 的可变价格。
我在 'Comic' class 中有吸气剂,但我只能访问属于父 class 'Book'.
的变量
abstract class Book
{
private string title;
private string author;
...
}
class Comic : Book
{
private double price;
...
}
static void Main(string[] args) {
...
for (int i = 0; i < books.Length; i++) {
if (books[i] is Comic)
Console.WriteLine("Price of comic is...");
// Here i want to access books[i].price or books[i].Price with getter.
}
...
}
首先,您需要更改价格字段的可访问性,或者创建一个public 属性,然后,您可以使用模式匹配功能(在 'if' 行检查它,我在 Comic 类型之后写了一个 c,如果 'is' 检查为真,则将 Book 转换为 Comic,您可以在 'if' 语句中使用该变量):
static void Main(string[] args) {
...
for (int i = 0; i < books.Length; i++) {
if (books[i] is Comic c)
Console.WriteLine("Price of comic is..." + c.price);
// Here i want to access books[i].price or books[i].Price with getter.
}
...
}
私有变量(如您的书 class 中所示)在 class 范围之外不可访问。这意味着,例如 book.title 将显示错误。
为了使您的 "price" 属性 可用,我首先建议将该变量改为 Book class(因为可以假设所有书籍或派生的 classes 应该有一个价格)。
之后你可以创建一个 public 属性 如下:
public double Price { get; set; }
这将在尝试访问您的藏书中的对象时公开价格 属性。
至于在您的主要方法中访问您的价格,类似以下的方法可能适合:
static void Main(string[] args) {
...
for (int i = 0; i < books.Length; i++) {
if (books[i] is Comic)
Comic c = books[i] as Comic;
Console.WriteLine("Price of comic is..." + c.Price);
}
...
}
很快,C# 中的访问器往往遵循与许多语法相似的语言(例如 Java 或 C++)相同的规则:
Public : 可以在使用 class.
实例的任何范围级别访问
Private :只能在class范围内访问,不能在class之外直接访问。
我有 1 个摘要 class 'Book' 和 2 个子classes 'Comic' 和 'Novel' 从第一个摘要 class 扩展而来。 在主要方法中,我必须创建书籍数组来存储漫画和小说的实例。
我的问题是我不知道如何访问 class 'Comic' 的可变价格。 我在 'Comic' class 中有吸气剂,但我只能访问属于父 class 'Book'.
的变量abstract class Book
{
private string title;
private string author;
...
}
class Comic : Book
{
private double price;
...
}
static void Main(string[] args) {
...
for (int i = 0; i < books.Length; i++) {
if (books[i] is Comic)
Console.WriteLine("Price of comic is...");
// Here i want to access books[i].price or books[i].Price with getter.
}
...
}
首先,您需要更改价格字段的可访问性,或者创建一个public 属性,然后,您可以使用模式匹配功能(在 'if' 行检查它,我在 Comic 类型之后写了一个 c,如果 'is' 检查为真,则将 Book 转换为 Comic,您可以在 'if' 语句中使用该变量):
static void Main(string[] args) {
...
for (int i = 0; i < books.Length; i++) {
if (books[i] is Comic c)
Console.WriteLine("Price of comic is..." + c.price);
// Here i want to access books[i].price or books[i].Price with getter.
}
...
}
私有变量(如您的书 class 中所示)在 class 范围之外不可访问。这意味着,例如 book.title 将显示错误。
为了使您的 "price" 属性 可用,我首先建议将该变量改为 Book class(因为可以假设所有书籍或派生的 classes 应该有一个价格)。 之后你可以创建一个 public 属性 如下:
public double Price { get; set; }
这将在尝试访问您的藏书中的对象时公开价格 属性。
至于在您的主要方法中访问您的价格,类似以下的方法可能适合:
static void Main(string[] args) {
...
for (int i = 0; i < books.Length; i++) {
if (books[i] is Comic)
Comic c = books[i] as Comic;
Console.WriteLine("Price of comic is..." + c.Price);
}
...
}
很快,C# 中的访问器往往遵循与许多语法相似的语言(例如 Java 或 C++)相同的规则:
Public : 可以在使用 class.
实例的任何范围级别访问Private :只能在class范围内访问,不能在class之外直接访问。