[英]C# Making Array of different types of objects
初學者在這里。 我試圖找到一種方法,當它們不是同一類型的對象時,如何在不始終使用“ array [0] as ClassName”的情況下訪問數組中的對象的屬性。 無需詳細答案。 您也可以向我推薦/引導我到哪里去閱讀這些東西,因為也許答案就在我眼前,但由於我是初學者,所以我將無法識別它。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Vezba_9_object_ecercises
{
class Program
{
static void Main(string[] args)
{
object[] books = new object[2];
books[0] = new SomeBooks("Book_1", "Good", 22);
Console.WriteLine((books[4] as SomeBooks).name); // working
// Console.WriteLine((books[4].name); // not working, how to make it work
books[1] = new OtherBooks("Book_2", "Bad", 2);
Console.WriteLine((books[4] as OtherBooks ).name); // working
// Console.WriteLine((books[4].name); // not working, how to make it work
}
}
public class SomeBooks
{
public SomeBooks(string _name, string _likability, int _numberOfPages)
{
name = _name;
likability = _likability;
numberOfPages = _numberOfPages;
}
public string name { get; set; }
public string likability { get; set; }
public int numberOfPages { get; set; }
}
public class OtherBooks
{
public OtherBooks(string _name, string _likability, int _numberOfAuthors)
{
name = _name;
likability = _likability;
NumberOfAuthors = _numberOfAuthors;
}
public string name { get; set; }
public string likability { get; set; }
public int NumberOfAuthors { get; set; }
}
}
您可以使SomeBook和OtherBook類從Book
基類(或接口)繼承。 這將允許您將它們存儲在類型為Book[]
而不是object[]
的數組中。 您可以通過這種方式訪問繼承的屬性,例如Name和Likability,而無需強制轉換。
public class Book
{
public string Name { get; set; }
public string Likability { get; set; }
}
public class SomeBook : Book
{
public int NumberOfPages { get; set; }
}
public class OtherBook : Book
{
public int NumberOfAuthors { get; set; }
}
但是我反對這樣做的必要性。 問問自己這是否設計過度。 您可能只有一個Book類,該類允許其他值均為null。
public class Book
{
public string Name { get; set; }
public string Likability { get; set; }
public int? NumberOfPages { get; set; }
public int? NumberOfAuthors { get; set; }
}
您的數組類型必須是一個接口,每個元素的類型必須是一個繼承該接口的類。
public interface IBook
{
string Name { get; set; }
string Likability { get; set; }
}
public class SomeBook : IBook
{
public string Name { get; set; }
public string Likability { get; set; }
public int NumberOfPages { get; set; }
}
public class OtherBook : IBook
{
public string Name { get; set; }
public string Likability { get; set; }
public int NumberOfAuthors { get; set; }
}
public class Books
{
public Books()
{
IBook[] books = new IBook[2] {
new SomeBook(),
new OtherBook()
};
for (int i = 0; i < books.Length; i++)
{
switch (books[i].GetType().Name)
{
case "SomeBook":
int numberOfPages = ((SomeBook)books[i]).NumberOfPages;
break;
case "OtherBook":
int numberOfAuthors = ((OtherBook)books[i]).NumberOfAuthors;
break;
}
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.