Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/272.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何创建没有构造函数的类的对象,C#_C#_.net_Declaration_Ipfs - Fatal编程技术网

如何创建没有构造函数的类的对象,C#

如何创建没有构造函数的类的对象,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

我正在尝试使用api,但无法调用此类的任何方法

    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纠正或等待他创建答案?正确的做法是什么?我在回答之前没有看到格兰特的评论,但他是第一个,我觉得我没有添加任何其他内容。格兰特应该将他的评论转换为答案。