如何创建没有构造函数的类的对象,C#
我正在尝试使用api,但无法调用此类的任何方法如何创建没有构造函数的类的对象,C#,c#,.net,declaration,ipfs,C#,.net,Declaration,Ipfs,我正在尝试使用api,但无法调用此类的任何方法 namespace Ipfs.Api { /// <summary> /// Manages the files/directories in IPFS. /// </summary> /// <remarks> /// <para> /// This API is accessed via the <see cref="Ip
namespace Ipfs.Api
{
/// <summary>
/// Manages the files/directories in IPFS.
/// </summary>
/// <remarks>
/// <para>
/// This API is accessed via the <see cref="IpfsClient.FileSystem"/> property.
/// </para>
/// </remarks>
/// <seealso href="https://github.com/ipfs/interface-ipfs-core/tree/master/API/files">Files API</seealso>
public class FileSystemApi
{
IpfsClient ipfs;
Lazy<DagNode> emptyFolder;
internal FileSystemApi(IpfsClient ipfs)
{
this.ipfs = ipfs;
this.emptyFolder = new Lazy<DagNode>(() => ipfs.Object.NewDirectoryAsync().Result);
}
/// <summary>
/// Add a file to the interplanetary file system.
/// </summary>
/// <param name="path"></param>
public Task<FileSystemNode> AddFileAsync(string path)
{
return AddAsync(
new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.Read),
Path.GetFileName(path));
}
}
名称空间Ipfs.Api
{
///
///管理IPFS中的文件/目录。
///
///
///
///此API通过属性进行访问。
///
///
///文件API
公共类文件系统API
{
ipfs客户端ipfs;
懒惰的空行者;
内部文件系统API(IpfsClient ipfs)
{
this.ipfs=ipfs;
this.emptyFolder=new Lazy(()=>ipfs.Object.newDirectorySync().Result);
}
///
///将文件添加到星际文件系统。
///
///
公共任务AddFileAsync(字符串路径)
{
返回AddAsync(
新的文件流(路径,FileMode.Open,FileAccess.Read,FileShare.Read),
GetFileName(Path));
}
}
我想在不修改API的情况下使用它,我不能声明对象,因为我不能调用任何构造函数,我不能调用任何没有对象的方法,因为它们不是静态的
我该怎么办?您不能在没有反射的情况下实例化该类,这有点麻烦(取决于内部接口),因为API维护人员通常不关心保持内部位向后兼容 doc标签为您提供了一条重要线索:
“此API是通过IpfsClient.FileSystem属性访问的。”您不能在没有反射的情况下实例化该类,这有点粗糙(取决于内部接口是次优的,因为API维护人员通常不关心保持内部位向后兼容) doc标签为您提供了一条重要线索:
“此API是通过IpfsClient.FileSystem属性访问的。”如果调用
var fsa=new Ipfs.API.FileSystemApi()
,会发生什么情况?如果没有您定义的构造函数,则始终有一个默认构造函数,没有编译器定义的参数。因此,您可以始终调用new FileSystemApi()。阻止此操作的唯一方法是在类FileSystemApi内定义私有或内部构造函数。在您的情况下,FileSystemApi的设计者不希望文件外的任何人能够在此类上调用new。因此,除非使用reflection@DourHighArch,否则无法将自己称为该类的实例。我刚刚发布了一张图片关于这两个答案,我不知道为什么,但它不允许我使用没有参数的默认构造函数。如果类的设计者决定保持私有,那么你不应该直接使用该类。可能还有另一个类使用这些方法,并向你提供该类的公共接口。如果你调用var fsa=new Ipfs.Api.FileSystemApi()
?如果没有您定义的构造函数,那么总是有一个默认构造函数,没有编译器定义的参数。因此您可以始终调用new FileSystemApi()。阻止此操作的唯一方法是在类FileSystemApi内定义私有或内部构造函数。在您的情况下,FileSystemApi的设计者不希望文件外的任何人能够在此类上调用new。因此,除非使用reflection@DourHighArch,否则无法将自己称为该类的实例。我刚刚发布了一张图片关于这两个答案,我不知道为什么,但它不允许我使用没有参数的默认构造函数。如果类的设计者决定保持私有,那么你不应该直接使用该类。可能还有另一个类使用这些方法,并向你提供该类的公共接口。你也是对的,访问这些方法的正确方法是创建一个IpfsClient对象,然后通过其属性文件系统调用这些方法。@Grantwiney首先解决了我的问题,但问题出现在注释上,我应该将您标记为正确还是等待他创建答案?正确的方法是什么?我在回答之前没有看到grant的注释,但他回答了是第一个,我觉得我没有添加任何附加内容。Grant应该将他的注释转换为答案。你也是对的,访问这些方法的正确方法是创建一个IpfsClient对象,然后通过其属性文件系统调用这些方法。@Grantwiney首先解决了我的问题,但问题在注释上,我是否应该将你标记为cor纠正或等待他创建答案?正确的做法是什么?我在回答之前没有看到格兰特的评论,但他是第一个,我觉得我没有添加任何其他内容。格兰特应该将他的评论转换为答案。