c# - 可以使用类的成员函数更改对象的实例吗?
问题描述
成员函数应该更改调用对象的实例。但我最近的尝试并没有改变实例。
我想提供一个基类,它实现了一个将字符串(或文件)反序列化为子类对象的函数。
甚至有可能做这样的事情吗?
编辑:好的,让我们忘记扩展方法。另一种尝试是:
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);
}
}
}
或者我可以使用构造函数吗?
最好的问候,马丁
解决方案
这是不可能的。在您的情况下,“bar”是静态方法范围内的局部变量,最终您将其重新分配给不同的实例。您处理的不是同一个调用对象。
根据您尝试解决的解决方案,您可以将基类/子类分成两个单独的类,并在“child”中有一个“base”类型的成员。
推荐阅读
- python - odoo 10 维护设备模块中的记录仅对管理员可用?
- ios - 如何将新添加的 UIWindow 保持在顶部
- python-3.x - 函数 print 在 python 中没有显示正确的格式编号
- excel - 从文件夹导入所有工作簿 (VBA - Mac)
- oracle - 无法在表空间 TEMP 中为 clob 将临时段扩展 128
- java - 如何将 Oozie 批处理开始日期属性转换为 UTC 格式?
- android - 安装APK Xiami Redmi A4时出错
- javascript - 在 laravel 中使用 ajax 可拖动行
- python - python中的&=后面有哪些数学或逻辑运算?
- angular - Angular 6:“Observable”类型上不存在属性“catch”
'?