Question: How do you define a getter and setter for complex data types such as a dictionary?

```
public Dictionary<string, string> Users
{
    get
    {
        return m_Users;
    }

    set
    {
        m_Users = value;
    }
}

```

This returns the entire dictionary? Can you write the setter to look and see if a specific key-value pair exists and then if it doesn't, add it. Else update the current key value pair? For the get, can you return a specific key-value pair instead of the whole dictionary?

Answer: 
You won't be able to do that with a property. You'll need to use methods for that, or add an indexer to your class. The `get` method can't accept a parameter (the key).

Another option, if you want someone to be able to easily add/remove keys to the dictionary but prevent them from setting an entirely new one would be to make the property a read-only property that returns a dictionary created in the constructor. It would be less flexible then adding get/set methods, but in common, simple cases it can do just fine.
It *is* possible to do so with the setter but highly unrecommended, and is completely impossible with the getter as it takes no parameter to determine what to get.

For the setter you would have to pass a `Dictionary<string, string>` with a single pair but it goes against what you would expect the getter/setter to usually do and completely stops you setting the entire Dictionary.

A much better way is to use a pair of methods which you can name Get and Set if you so desire.