簡體   English   中英

在基類引用上轉換繼承類

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM