【问题标题】:How can I create an object of a class with no constructor, C#如何创建没有构造函数的类的对象,C#
【发布时间】:2017-08-10 23:06:52
【问题描述】:

我正在尝试使用 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));
        }
}

我想在不修改的情况下使用 API,我不能声明一个对象,因为我不能调用任何构造函数,我不能调用任何没有对象的方法,因为它们不是静态的。

我该怎么办?

【问题讨论】:

  • 如果你打电话给var fsa = new Ipfs.Api.FileSystemApi()会发生什么?
  • 如果没有你定义的构造函数,那么总会有一个默认的构造函数,没有编译器定义的参数。所以你可以随时调用 new FileSystemApi()。阻止这种情况的唯一方法是在 FileSystemApi 类中定义私有或内部构造函数。在您的情况下, FIleSystemApi 的设计者不希望文件之外的任何人都能够在此类上调用 new 。所以没有办法给自己创建一个该类的实例
  • @DourHighArch 我刚刚发布了一张与这两个答案相关的图片,我不知道为什么,但它不允许我使用没有参数的默认构造函数。
  • 如果类的设计者决定保持私有,那么你不应该直接使用该类。可能还有另一个类使用这些方法并为您提供该类的公共接口。

标签: c# .net declaration ipfs


【解决方案1】:

你不能在没有反射的情况下实例化该类,这有点笨拙(依赖于内部接口是次优的,因为 API 维护人员通常不关心保持内部位向后兼容。

doc 标签给了你一个重要的线索: "通过 IpfsClient.FileSystem 属性访问此 API。"

【讨论】:

  • 你也对,访问这些方法的正确方法是创建一个 IpfsClient 对象,然后通过其属性 FileSystem 调用这些方法。
  • @GrantWinney 首先解决了我的问题,但它在 cmets 上,我应该将您标记为正确还是等待他创建答案?正确的做法是什么?
  • 我在回答之前没有看到格兰特的评论,但他是第一个,我不觉得我添加了什么额外的东西。格兰特应该将他的评论转化为答案。
猜你喜欢
  • 2018-01-22
  • 1970-01-01
  • 1970-01-01
  • 2016-09-23
  • 2012-02-05
  • 2021-01-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多