gpt4 book ai didi

c# - F# 看不到 C# 可序列化抽象类的抽象属性

转载 作者:太空宇宙 更新时间:2023-11-03 13:56:22 25 4
gpt4 key购买 nike

这是我的可序列化抽象类

namespace NEN_FS {
[Serializable()]
abstract public class NFS : IEquatable<NFS> {
abstract public string Path { get; set; }
public NFS() {
Path = "";
}
public NFS(string path) {
Path = path;
}
public override bool Equals(object obj) {
NFS other = obj as NFS;
return (other != null) && ((IEquatable<NFS>)this).Equals(other);
}
bool IEquatable<NFS>.Equals(NFS other) {
return Path.Equals(other.Path);
}
public override int GetHashCode() {
return Path != null ? Path.GetHashCode() : base.GetHashCode();
}
}
}

我在 F# 中的内容:let file = files.[0]. 并且没有 Path 字段。

这是为什么呢?如何访问 Path 属性?

最佳答案

嗯?奇怪.. 元数据读取或智能感知中可能存在一些错误。尝试写入 file.[0].Path 并编译。有时 Intellisense 会跳过一些东西,但编译器会正确地看到整个结构并进行编译而不会产生任何提示。

如果不工作 - 那么 F# 可能不喜欢 abstract由于某些我不知道的原因(即一些整体废话,例如实例化“示例对象”的可能性)。我还不精通 F#,但考虑 .Net 本身,您是否尝试过定义和使用接口(interface)而不是抽象基础?我的意思是:

namespace NEN_FS {
public interface class INFS : IEquatable<NFS>
{
string Path { get; set; }
}

[Serializable()]
abstract public class NFS : INFS {
abstract public string Path { get; set; }
public NFS() {
Path = "";
}
public NFS(string path) {
Path = path;
}
public override bool Equals(object obj) {
NFS other = obj as NFS;
return (other != null) && ((IEquatable<NFS>)this).Equals(other);
}
bool IEquatable<NFS>.Equals(NFS other) {
return Path.Equals(other.Path);
}
public override int GetHashCode() {
return Path != null ? Path.GetHashCode() : base.GetHashCode();
}
}

然后公开IEnumerable<INFS> Files而不是 IEnumerable<NFS> Files .这样它就必须工作,因为接口(interface)是访问许多东西的核心..

关于c# - F# 看不到 C# 可序列化抽象类的抽象属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12051288/

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