0

我想把属性放在界面中。
如果我这样做,我的问题:

class ClassA: IClassA
{
    public string Id{ get; private set; }

界面:

public interface IClassA
{
    string Id{ get; }
}

这不会编译,一方面,我想强制实现类具有属性,所以我没有在接口中放置“set”,当我尝试编译时,我得到:

.ClassA.set' is not public.
4

2 回答 2

1

你的代码看起来不错。您的接口仅指定了一个属性 getter,因此实现者只需要指定 getter。他们是否指定了一个 setter,以及 setter 是公共的还是私有的都无关紧要。所有这 3 个都应该对指定的 IClassA 有效。

class ClassA : IClassA
{
    public string Id { get; }
}

class ClassA : IClassA
{
    public string Id { get; set; }
}

class ClassA : IClassA
{
    public string Id { get; private set; }
}
于 2013-03-12T13:02:29.063 回答
1

您的代码有效:

namespace ConsoleApplication1
{
  using System;

  internal class ClassA : IClassA
  {
    public ClassA(string id)
    {
      this.Id = id;
    }

    public string Id { get; private set; }
  }

  public interface IClassA
  {
      string Id{ get; }
  }

  class Program
  {
    static void Main()
    {
      var a = new ClassA("Test");

      Console.WriteLine(a.Id);

      Console.ReadLine();
    }
  }
}

如果您的编译器有问题,请检查代码的其他部分或发布完整的错误消息,包括代码行。

于 2013-03-12T13:08:31.177 回答