在 public 方法中使用内部 class

use internal class in public method

嗨,我正在创建一个库。我有一个内部可访问的模型 class 和一个 public.

的方法

我知道由于访问级别的原因,内部访问不能用于public

如果我让模型class访问public,当用户使用库时,他可以访问方法和模型class 我希望用户只能访问该方法

 public class GithubReleaseModel
        {
            public bool IsExistNewVersion { get; set; }
            public string Url { get; set; }
            public string Changelog { get; set; }
            public string Version { get; set; }
            public string DownloadUrl { get; set; }
            public string Size { get; set; }
            public bool IsPreRelease { get; set; }
            public DateTime CreatedAt { get; set; }
            public DateTime PublishedAt { get; set; }
        }

 public static GithubReleaseModel IsNewVersionExistGithub(string Username, string Repository)
        {
            var model = new GithubReleaseModel();
            ...
            return model;
        }

如果您只想让外部用户无法更改属性,请将设置器设为内部:

public bool IsExistNewVersion { get; internal set; }

这样每个人都可以阅读,但您只能从程序集(您的库)内部编写。

编辑

如果您不希望库的用户创建您的 class 的实例,请限制对构造函数的访问:

    public class GithubReleaseModel
    {

        internal GithubReleaseModel()
        {
            // internal constructor 
        }

        public bool IsExistNewVersion { get; set; }
        public string Url { get; set; }
        public string Changelog { get; set; }
        public string Version { get; set; }
        public string DownloadUrl { get; set; }
        public string Size { get; set; }
        public bool IsPreRelease { get; set; }
        public DateTime CreatedAt { get; set; }
        public DateTime PublishedAt { get; set; }
    }

    public static GithubReleaseModel IsNewVersionExistGithub(string Username, string Repository)
    {
        var model = new GithubReleaseModel();
        ...
        return model;
    }

通过这种方式您可以像以前一样创建和 return 您的模型,但是如果外部人员想要创建一个 new GithubReleaseModel() 他会遇到访问冲突。

如果您的意思是您不希望库的使用者实例化您的模型,您可以创建构造函数 privateinternal.

示例:

public class GithubReleaseModel
{
  private GithubReleaseModel()
  {
  }
  // ...
}

用消费者方法可以调用的方法定义一个接口。您的实现 class 可以保持 internal 那种方式而不暴露任何东西。

public interface IGithubReleaseModel {
    int DoSomethingYouWant();
}

internal class GithubReleaseModel : IGithubReleaseModel {
    public int DoSomethingYouWant() {
        return 42;
    }
}

public static IGithubReleaseModel IsNewVersionExistGithub(string Username, string Repository)
{
    var model = new GithubReleaseModel();
    ...
    return model;
}