Set a read only property defined in a interface within a concrete class

This doesn't have anything to do with the interface, you're just declaring the property incorrectly. In C# 6, you can create a read-only property like this:

public class Person : IPerson
{
    public Person()
    {
        Name = "Person";
    }

    public string Name { get; }
}

In earlier versions, you can use a read-only backing field which you can set:

public class Person : IPerson
{
    private readonly string _name;

    public Person()
    {
        _name = "Person";
    }

    public string Name
    {
        get { return _name; }
    }
}

Note that the interface only requires the property has a getter, the implementation doesn't have to be read-only. You could add a setter if you had reason to modify the value:

public class Person : IPerson
{
    public Person()
    {
        Name = "Person";
    }

    public string Name { get; set; }
}

The setter could be private if you only needed to be able to change the value from within the class.


You can use a private property to hold the value.

public class Person : IPerson
{
    private string _name;
    public Person()
    {
        _name = "Person";
    }

    public string Name
    {
        get
        {
            return _name;
        }
    }
}

Right now, you're trying to read the property by reading the property. Needless to say, this will result in an endless loop. Instead, you either need to use full-blown auto-properties, or a manual backing field.

public class Person : IPerson
{
    public Person()
    {
        Name = "Person";
    }

    public string Name { get; private set; }
}

You simply have a private setter (pre c#6):

public class Person : IPerson
{

    public Person()
    {
        Name = "Person";
    }

    public string Name { get; private set; }

}