gpt4 book ai didi

c# - 将属性的效果级联到子类中的重写属性

转载 作者:可可西里 更新时间:2023-11-01 08:48:53 25 4
gpt4 key购买 nike

是否可以在基类中标记一个在子类中仍然有效的属性?

问题可能非常针对序列化,但我绝对认为也可以有其他用途。

考虑以下代码:

using System;
using System.IO;
using System.Xml.Serialization;

namespace Code.Without.IDE
{
[Serializable]
public abstract class C1
{
[XmlIgnore]
public abstract bool IsValid_C1 { get; set;}
}

[Serializable]
public class C2 : C1
{
public bool IsValid_C2 { get; set; }

public override bool IsValid_C1 { get; set;}

public C2()
{
IsValid_C1 = true;
IsValid_C2 = false;
}
}

public static class AbstractPropertiesAttributeTest
{
public static void Main(string[] args)
{
C2 c2 = new C2();
using(MemoryStream ms = new MemoryStream())
{
XmlSerializer ser = new XmlSerializer(typeof(C2));
ser.Serialize(ms, c2);
string result = System.Text.Encoding.UTF8.GetString(ms.ToArray());
Console.WriteLine(result);
}
}
}
}

以上代码返回:

------ C:\abhi\Code\CSharp\without IDE\AbstractPropertiesAttributeTest.exe 
<?xml version="1.0"?>
<C2 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<IsValid_C2>false</IsValid_C2>
<IsValid_C1>true</IsValid_C1>
</C2>
------ Process returned 0

我以为 IsValid_C1 会被忽略,但事实并非如此。除了将属性(property)标记为 protected 之外,还有其他方法可以实现这一目标吗?

编辑:显示 XmlIgnore 属性正在被继承的快速代码。 http://ideone.com/HH41TE

最佳答案

我不相信有一种方法可以继承该属性,因为您覆盖了基类属性。您需要使用 XmlIgnore 装饰 C2 的 IsValid_C1:

    [Serializable]
public class C2 : C1
{
public bool IsValid_C2 { get; set; }

[XmlIgnore]
public override bool IsValid_C1 { get; set; }

public C2()
{
IsValid_C1 = true;
IsValid_C2 = false;
}
}

关于c# - 将属性的效果级联到子类中的重写属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16426509/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com