[英]Casting inherited class on base class reference
如何使用強制轉換通過基類引用訪問繼承類對象的字段?
例如,如何訪問 SpecificStudent 課程中的成績字段?
我在這里嘗試的鑄造不起作用。
謝謝!
namespace ConsoleApp4
{
internal class Program
{
static void Main(string[] args)
{
Student[] students = new Student[2];
students[0].name = "somename";
students[1].name = "anothersomename";
students[1] = (SpecificStudent)students[1];
// students[1].grade //This is what I want to be able to do
}
class Student
{
public string name;
}
class SpecificStudent:Student
{
public string grade;
}
}
}
你試過這個嗎?
static void Main(string[] args)
{
Student[] students = new Student[2];
students[0].name = "somename";
students[1].name = "anothersomename";
Console.WriteLine(((SpecificStudent)students[1]).grade);
}
class Student
{
public string name;
}
class SpecificStudent : Student
{
public string grade;
}
如果您將student[1]
與(SpecificStudent)student[1]
相等,則您將再次將特定內容重新轉換為Student
,因為您的數組是Student
類型。 如果你願意,你可以直接使用它或創建另一個數組
直接使用強制轉換
((SpecificStudent)students[1]).grade
這是你應該如何做的:
static void Main(string[] args)
{
Student[] students = new Student[2];
Student student = new Student();
student.name = "somename"
students[0] = student;
SpecificStudent specificStudent = new SpecificStudent();
specificStudent.name = "anothersomename";
specificStudent.grade = "B";
students[1] = specificStudent;
}
或者
SpecificStudent specificStudent = students[1] as SpecificStudent;
if (specificStudent != null) // the cast succeeded
{
specificStudent.grade = "B";
}
沒有辦法安全地向下轉換為子類型。 您可以檢查一個實例是否是該類型( as
運算符會這樣做),但盲投可能會在運行時失敗。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.