Search code examples
c#variablestypesaccessor

Accessor with different set and get types?


Simple question, hopefully a simple answer:

I'd like to do the following:

private DateTime m_internalDateTime;
public var DateTimeProperty
{
   get { return m_internalDateTime.ToString(); } // Return a string
   set { m_internalDateTime = value; } // here value is of type DateTime
}

The above is just an example of what I'm trying to do. I'd like to have a public accessor to an internal variable of type x. I want the get that variable as a string, but set it using something of type x.

Is this possible?

--edit--

I just realized I could do something like:

private DateTime m_internalDateTime;
public object DateTimeProperty
{
   get { return m_internalDateTime.ToString(); } // Return a string
   set { m_internalDateTime = (DateTime)value; } // here value is of type DateTime
}

But then, let say I use type y instead of a "string" as my 'get' type. If I want to use "DateTimeProperty" else where in my code, I'd have to cast it.


Solution

  • No. You can obviously add the .ToString() in the calling code, but you can't do what you propose without different names like this:

    private DateTime m_internalDateTime;
    public DateTime SetDateTime { set { m_internalDateTime = value; } }
    public string GetDateTime   { get { return m_internalDateTime.ToString(); } } 
    

    Or, even better to use methods instead of properties (as noted in the comments):

    private DateTime m_internalDateTime;
    public void SetDateTime(DateTime dateTime) { m_internalDateTime = dateTime; }
    public string GetDateTime() { return m_internalDateTime.ToString(); }
    

    Keep in mind that var is for implicitly, compile-time typed variables, not dynamic variables.

    Definitely do not do what you noted in your edit. It introduced a break in convention, possible performance implications (albeit slight), and significant localization problems.