cuốn sách gpt4 ai đã làm

c# - Hàm tạo ghi đè trong lớp dẫn xuất, được xác định bởi giao diện của siêu lớp

In lại Tác giả: Vũ trụ không gian Thời gian cập nhật: 2023-11-03 15:17:17 hai mươi bốn 4
mua khóa gpt4 Nike

kết cấu

B Lớp mở rộng MỘT.MỘT thực hiện giao diện Có thể tuần tự hóa được

Có thể tuần tự hóa đượcMột hàm tạo được định nghĩa:

công khai A(thông tin SerializationInfo, StreamingContext ctxt)

我需要在 B Viết cách triển khai cụ thể của hàm tạo này trong .

Tôi đã thử đơn giản là đặt hàm tạo vào B trong - nhưng nó sẽ không được gọi. Tôi dường như cũng không thể ghi đè lên nó.

vấn đề đơn giản hóa

所以 A(Thông tin SerializationInfo, StreamingContext ctxt) luôn được gọi thay vì B(Thông tin SerializationInfo, StreamingContext ctxt): base(info, ctxt).

hoặc

newBase() Không được gọi newDerived()

Mã gọi hàm tạo (sai):

gia hạn

  • Đối tượng được coi là đối tượng của A - đây có thể là vấn đề!

gia hạn

Danh sách list = Danh sách mới();
list.Add(New B());
chuỗi s = JsonConvert.SerializeObject(danh sách);
JsonConvert.DeserializeObject<>
>(s); <--- //nó được gọi từ đây.

Bất kỳ ý tưởng nào để giải quyết vấn đề thừa kế này?

Chi tiết

lớp công khai A: ISerializable
{
public A(int id, tên chuỗi, loại chuỗi, danh mục chuỗi, mô tả chuỗi, dữ liệu chuỗi)
{
cái này.Id = id;
this.Name = tên;
cái này.Type = loại;
this.Category = danh mục;
this.Description = mô tả;
this.Data = dữ liệu;
}

được bảo vệ A (Thông tin SerializationInfo, StreamingContext ctxt)
{
Id = (int)info.GetValue("id", typeof(int));
Tên = (Chuỗi)info.GetValue("name", typeof(string));
Gõ = (String)info.GetValue("type", typeof(string));
Category = (String)info.GetValue("category", typeof(string));
Mô tả = (Chuỗi)info.GetValue("mô tả", typeof(string));
Dữ liệu = (Chuỗi)info.GetValue("data", typeof(string));
}
}

công khai hạng B :A
{

public B(int id, tên chuỗi, loại chuỗi, danh mục chuỗi, mô tả chuỗi, dữ liệu chuỗi): base(id, tên, loại, danh mục, mô tả, dữ liệu)
{
// mã B cụ thể
}

được bảo vệ B(Thông tin SerializationInfo, StreamingContext ctxt): base(info, ctxt){
// ĐIỀU NÀY KHÔNG BAO GIỜ ĐƯỢC GỌI
// mã B cụ thể
}


}

câu trả lời hay nhất

Điều này sẽ giúp bạn gọi một số mã trong lớp dẫn xuất trong trường hợp của bạn. Nó chỉ cố gắng cho bạn một sự lựa chọn. Không biết bối cảnh, tôi không thể đưa ra phán xét. Ngoài ra, hãy xem cuộc gọi thành viên ảo là gì .

Bạn có thể xác định phương thức ảo trong A và gọi (thông tin SerializationInfo, StreamingContext ctxt) trong A.

lớp công khai A: ISerializable
{
công khai A(tên chuỗi)
{
}

khoảng trống ảo công khai Foo()
{
}

được bảo vệ A (Thông tin SerializationInfo, StreamingContext ctxt)
{
Foo();
}

public void GetObjectData(Thông tin SerializationInfo, bối cảnh StreamingContext)
{
}
}

Sau đó sao chép/di chuyển một số logic trong B sang phương thức được ghi đè. Khi A(SerializationInfo info, StreamingContext ctxt) được gọi, Foo() của B cũng sẽ được gọi.

niêm phong công khai loại B: A
{
công khai B(tên chuỗi): cơ sở(tên)
{
}

ghi đè công khai void Foo()
{
Thẻ = "B";
}

Thẻ chuỗi công khai { được đặt;

được bảo vệ B(Thông tin SerializationInfo, StreamingContext ctxt): base(info, ctxt)
{
}
}

Về C# - ghi đè một hàm tạo trong lớp dẫn xuất, được xác định bởi giao diện của siêu lớp, chúng tôi đã tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/38553424/

hai mươi bốn 4 0
không gian vũ trụ
Hồ sơ

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá taxi Didi miễn phí
Phiếu giảm giá taxi Didi
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress