首页 > 解决方案 > 可以使用类的成员函数更改对象的实例吗?

问题描述

成员函数应该更改调用对象的实例。但我最近的尝试并没有改变实例。

我想提供一个基类,它实现了一个将字符串(或文件)反序列化为子类对象的函数。

我试图实现一个扩展方法,但它没有按预期工作。调用实例不会改变。类 ChildClass : BaseClass { [XmlAttribute(AttributeName = "attribute")] public string Attribute { set; 得到; } } class BaseClass {} class static BaseClassExtension { public static void Deserialize(this BaseClass bar, string filePath) { using (StreamReader reader = new StreamReader(filePath)) { XmlSerializer serializer = new XmlSerializer(obj.GetType()); bar = (BaseClass)serializer.Deserialize(reader); } } } 类程序 { public void Main() { ChildClass foo = new ChildClass(); foo.Deserialize("file.xml"

甚至有可能做这样的事情吗?

编辑:好的,让我们忘记扩展方法。另一种尝试是:

class ChildClass : BaseClass
{
    [XmlAttribute(AttributeName = "atribute")]
    public string Atribute { set; get; }
}

class BaseClass
{
    public void Deserialize(string filePath)
    {
        using (StreamReader reader = new StreamReader(filePath))
        {
            XmlSerializer serializer = new XmlSerializer(this.GetType());
            return (BaseClass)serializer.Deserialize(reader);
        }
    }
}

class Program
{
    public void Main()
    {
        ChildClass foo = new ChildClass();

        // looks pretty bad and seems quite inconvenient to me 
        foo = (ChildClass)foo.Deserialize("file.xml")
    }
}

我“需要”的是这样的:

class BaseClass
{
    public void Deserialize(string filePath)
    {
        using (StreamReader reader = new StreamReader(filePath))
        {
            XmlSerializer serializer = new XmlSerializer(this.GetType());
            this = (BaseClass)serializer.Deserialize(reader);
        }
    }
}

或者我可以使用构造函数吗?

最好的问候,马丁

标签: c#

解决方案


这是不可能的。在您的情况下,“bar”是静态方法范围内的局部变量,最终您将其重新分配给不同的实例。您处理的不是同一个调用对象。

根据您尝试解决的解决方案,您可以将基类/子类分成两个单独的类,并在“child”中有一个“base”类型的成员。


推荐阅读