LuckyLikey
LuckyLikey

Reputation: 3840

Explicit implementation of properties

What i want to achieve is simple, i have an Interface IDatasource, which has a property called DatasourceSettings

public interface IDatasource
{
    DatasourceSettings DatasourceSettings { get; set; }
}

The implementing Class looks like this

public class TestDatasource : IDatasource
{
    public DatasourceSettings IDatasource.DatasourceSettings { get { return DatasourceSettings; } set { DatasourceSettings = (TestDatasourceSettings)value; } }
    public TestDatasourceSettings DatasourceSettings { get; set; }
}

As you may possibly see, the property is first implemented explicit, and it should return the DatasourceSettings Property of the class itself

So on, here is what i want to achieve

var ds = new TestDatasource();

if (ds.DatasourceSettings is TestDatasourceSettings && 
    ((IDatasource)ds).DatasourceSettings is DatasourceSettings)
{
    // should be true
}

The Error i get :

The modifier 'public' is not valid for this item

So What's wrong here?

Upvotes: 1

Views: 2853

Answers (2)

Florian Schmidinger
Florian Schmidinger

Reputation: 4692

    public class TestDatasource : IDatasource
    {
        DatasourceSettings IDatasource.DatasourceSettings { get { return DatasourceSettings; } set { DatasourceSettings = (TestDatasourceSettings)value; } }
        public TestDatasourceSettings DatasourceSettings { get; set; }
    }

Had the same mistake recently... turns out if the implementation is explicit you don't write access modifier.

Upvotes: 2

tolanj
tolanj

Reputation: 3724

Remove the public from

public DatasourceSettings IDatasource.DatasourceSettings 

Because it is explicitly implementing an interface method it is a-priori public

Upvotes: 3

Related Questions