2013-03-12 66 views
0

我想在接口中放置屬性。
我的問題,如果我做的:具有屬性和實現類的C#接口

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

接口:

public interface IClassA 
{ 
    string Id{ get; } 
} 

這並不編譯,從一隻手,我要強制執行類具有這樣的性質,所以我沒有把「設置」界面中,當我嘗試編譯我得到:

.ClassA.set' is not public. 
+4

我剛剛將你的代碼複製到一個新的Visual Studio項目中,它完美地編譯。 – dtb 2013-03-12 13:00:58

+0

什麼是錯誤信息? – 2013-03-12 13:01:26

+1

可能你錯過了接口}? – 2013-03-12 13:03:29

回答

1

你的代碼看起來很好。你的接口只指定一個屬性getter,所以實現者只需要指定getter。他們是否指定了一個制定者,以及制定者是公共還是私人並不重要。所有這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; } 
} 
+0

你是不是指「財產獲得者」? – 2013-03-12 13:03:26

+0

@Todd:對不起 - 冒昧地編輯 – chiccodoro 2013-03-12 13:05:30

+0

NP,我顯然打字太快了。 :) – 2013-03-12 13:07:56

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(); 
    } 
    } 
} 

如果編譯器有問題,檢查你的代碼的其他部分或發佈包括代碼行完整的錯誤消息。