Properites vs. Methods...

It is an age old debate… we have
some fairly
good guidelines
, but they certainly leave room for improvement. Today at a WinFX API review (for some
cool stuff that didn’t make it out in the PDC drop) we had the debate again…
Today the APIs look
like:/>

       
public DateTime
GetDisconnectTime();

       
public TimeSpan GetIdleTime();

       
public DateTime GetLogonTime();

       
public SessionStates
GetSessionStates();

       
public WindowsIdentity
GetUserInformation();

My knee jerk is to make these
properties…

       
public DateTime DisconnectTime {get;
}

       
public TimeSpan IdleTime {get; }

       
public DateTime LogonTime {get; }

       
public SessionStates SessionStates {get;
}

       
public WindowsIdentity UserInformation {get;
}

 the problem… well, the calls
*could* be cross machine…. My worry is if they are cross machine making
these guys properties will lead people to write inefficient code (and therefore
bring down the wrath of Rico)…

Pit of Despair:

void Button_Click (object sender,
EventArgs arg) {

     label.Text =
s.UserInformation.Name;

}

//Problem: You get the nice little
“(Not Responding)” title until the network call completes

Pit
of Success:

void Button_Click (object sender,
EventArgs arg) {

     label.Text =
s.GetUserInformation().Name;

}

//Now, that looks like it is doing
something that could be expensive. A good code review might very well catch
the fact that this really needs to be done asynchronously. The API design leads the user in the
right direction.

So, my question for you… Based on
this very limited data I have given you, what should we do here? Go for properties and hope for the best,
or error on the safe side and use methods, something
else?