Вы можете установить this
с таким способом .bind
и вызвать twitter.get
в componentDidMount
, как в этом example
componentDidMount: function() {
twitter.get('statuses/user_timeline', function(error, data) {
this.setState({tweets: data})
}.bind(this)); // set this that refers to you React component
}
Я не вижу оснований, почему то, что Вы отправили, не должно работать? Просто сделал быстрый тест, и он компилирует хорошо, но дает предупреждение о сокрытии. Это может быть зафиксировано путем добавления нового ключевого слова, как это:
public interface IMutableUser : IUser
{
new string Username { get; set; }
}
альтернатива должна была бы добавить явные методы установки; например:
public interface IMutableUser : IUser
{
void SetUsername(string value);
}
, Конечно, я предпочел бы использовать методы set, но если это не возможно, я предполагаю, что Вы делаете то, к чему Вы имеете.
Вы могли использовать абстрактный класс:
interface IUser
{
string UserName
{
get;
}
}
abstract class MutableUser : IUser
{
public virtual string UserName
{
get;
set;
}
}
Другая возможность состоит в том, чтобы иметь это:
interface IUser
{
string UserName
{
get;
}
}
interface IMutableUser
{
string UserName
{
get;
set;
}
}
class User : IUser, IMutableUser
{
public string UserName { get; set; }
}
Можно "переопределить" свойства в интерфейсе путем явной реализации интерфейсов. Ответ Chris вероятен все, в чем Вы будете нуждаться для сценария, который Вы обрисовали в общих чертах, но рассматриваете немного более сложный сценарий, где Вам нужен метод get/метод set на Вашем классе, но интерфейс только определяет метода get. Можно обойти это путем выполнения следующего:
public class MyUser : IUser
{
IUser.MyProperty { get { return "something"; } }
public MyProperty { get; set; }
}
Путем явной реализации IUser.MyProperty
, Вы удовлетворяете контракт. Однако путем обеспечения общественности MyProperty
, API для объекта никогда не будет показывать явную версию интерфейса и будет всегда использовать MyProperty с получением/устанавливанием.