Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

The Archive Base

The Archive Base Logo The Archive Base Logo

The Archive Base Navigation

  • SEARCH
  • Home
  • About Us
  • Blog
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • Add group
  • Groups page
  • Feed
  • User Profile
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Buy Points
  • Users
  • Help
  • Buy Theme
  • SEARCH
Home/ Questions/Q 6388501
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: May 25, 20262026-05-25T03:17:11+00:00 2026-05-25T03:17:11+00:00

How is it possible for ReadOnlyCollection to implement IList ? The latter requires implementation

  • 0

How is it possible for ReadOnlyCollection to implement IList? The latter requires implementation of the Add method, and the ReadOnlyCollection does not implement this. However, ReadOnlyCollection is concrete and can be instantiated…

Edit

The following code will not compile on my machine:

static void Main(string[] args)
{
    List<string> people = new List<string>(){
        "Sidney",
        "Jim",
        "Bob"};

    ReadOnlyCollection<string> readOnlyPeople = new ReadOnlyCollection<string>(people);
    readOnlyPeople.Add("Frank");
}

The call to “Add” in the last statement is now underlined in blue in Visual Studio 2010.

  • 1 1 Answer
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

1 Answer

  • Voted
  • Oldest
  • Recent
  • Random
  1. Editorial Team
    Editorial Team
    2026-05-25T03:17:12+00:00Added an answer on May 25, 2026 at 3:17 am

    It does implement Add, the implementation simply throws a NotSupportedException.

    The implementation uses “explicit interface implementation“, which is a way of implementing interfaces without directly exposing interface methods as public on the implementing class. It’s most useful when you have a class that implements more than one interface that defines the same member (see the example at the link). Basically, it looks something like this:

    public interface IList<T>
    {
        int Add(object value);
        // and a whole bunch of other stuff...
    }
    
    public class ReadOnlyCollection<T> : IList<T>
    {
        int IList<T>.Add(object value)
        {
            throw new NotSupportedException();
        }
    }
    

    Notice how the add method isn’t public, so if you have an instance of ReadOnlyCollection<T>, you can’t directly call Add on it. What you can do however, if you want to see the exception, is cast your instance to the interface:

    ReadOnlyCollection<string> readOnlyPeople = new ReadOnlyCollection<string>(people);
    ((IList<string>)readonlyPeople).Add("Frank"); // <-- bang!
    

    The other way you could achieve it is to declare your variable as an IList<T> directly:

    IList<string> readOnlyPeople = new ReadOnlyCollection<string>(people);
    readOnlyPeople.Add("Frank"); // <-- this should go 'bang!' too
    
    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Related Questions

Possible Duplicate: php == vs === operator Reference - What does this symbol mean
Possible Duplicate: Why not use tables for layout in HTML? Under what conditions should
Possible Duplicate: How do I calculate someone's age in C#? Maybe this could be
Possible Duplicate: .NET - What’s the best way to implement a catch all exceptions
Possible Duplicate: How does the Google Did you mean? Algorithm work? Suppose you have
Possible Duplicate: array_splice() for associative arrays How to add an array value to the
Possible Duplicate: thread with multiple parameters How does one thread a sub with two
Possible Duplicate: How can I combine multiple rows into a comma-delimited list in Oracle?
Possible Duplicate: Why is String.Concat not optimized to StringBuilder.Append? One day I was ranting
Possible Duplicate: Can a Bash script tell what directory it's stored in? Is there

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help
  • SEARCH

Footer

© 2021 The Archive Base. All Rights Reserved
With Love by The Archive Base

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.