В дополнение к другим причинам, уже указанным, это - ситуация, в которой класс реализует два различных интерфейса, которые имеют свойство/метод с тем же именем и подписью.
/// <summary>
/// This is a Book
/// </summary>
interface IBook
{
string Title { get; }
string ISBN { get; }
}
/// <summary>
/// This is a Person
/// </summary>
interface IPerson
{
string Title { get; }
string Forename { get; }
string Surname { get; }
}
/// <summary>
/// This is some freaky book-person.
/// </summary>
class Class1 : IBook, IPerson
{
/// <summary>
/// This method is shared by both Book and Person
/// </summary>
public string Title
{
get
{
string personTitle = "Mr";
string bookTitle = "The Hitchhikers Guide to the Galaxy";
// What do we do here?
return null;
}
}
#region IPerson Members
public string Forename
{
get { return "Lee"; }
}
public string Surname
{
get { return "Oades"; }
}
#endregion
#region IBook Members
public string ISBN
{
get { return "1-904048-46-3"; }
}
#endregion
}
Этот код компиляции и выполнения хорошо, но свойство Title совместно используется.
Очевидно, мы хотели бы значение Заголовка, возвращенного для зависимости от того, рассматривали ли мы Class1 как Книгу или Человека. Это - когда мы можем использовать явный интерфейс.
string IBook.Title
{
get
{
return "The Hitchhikers Guide to the Galaxy";
}
}
string IPerson.Title
{
get
{
return "Mr";
}
}
public string Title
{
get { return "Still shared"; }
}
Уведомление, что явные интерфейсные определения выведены для Общественности - и следовательно Вы не можете объявить, что они общедоступны (или иначе) явно.
Примечание также, что у Вас может все еще быть "общая" версия (как показано выше), но пока это возможно, существование такого свойства сомнительно. Возможно, это могло использоваться в качестве реализации по умолчанию Заголовка - так, чтобы существующий код не должен был быть изменен для кастинга Class1 к IBook или IPerson.
, Если Вы не определяете "общий" (неявный) Заголовок, потребители Class1 должны явно экземпляры броска Class1 к IBook или IPerson сначала - иначе, код не скомпилирует.
Для меня из оболочки mongo - поэтому я не уверен, что случилось с вами выше. Попробуйте это и посмотрите, работает ли это? В таком случае я бы посоветовал взять последний код mongo на случай, если что-то было проблематичным.
x = { 'name': 'test', anotherdoc: { 'something': 'someval', somenum : 1 } }
> x
{"name" : "test" , "anotherdoc" : {"something" : "someval" , "somenum" : 1}}
> collection = db.foo;
test.foo
> collection.insert(x)
> collection.find()
{"_id" : ObjectId( "4a61b6711591f41f0f1bc5ff") , "name" : "test" , "anotherdoc" : {"something" : "someval" , "somenum" : 1}}
> x
{"name" : "test" , "anotherdoc" : {"something" : "someval" , "somenum" : 1}}
> x._id
> x = collection.findOne()
{"_id" : ObjectId( "4a61b6711591f41f0f1bc5ff") , "name" : "test" , "anotherdoc" : {"something" : "someval" , "somenum" : 1}}
> collection.update({'_id': x._id}, {$set: {'anotherdoc.something': 'somenewval'}} )
> collection.find()
{"_id" : ObjectId( "4a61b6711591f41f0f1bc5ff") , "name" : "test" , "anotherdoc" : {"somenum" : 1 , "something" : "somenewval"}}
>
Как упоминалось выше, форумы MongoDB, вероятно, будут видны быстрее (или попробуйте IRC).
Лучше спросите об этом в googlegroup пользователя mongodb. Ответ на ваш вопрос здесь http://groups.google.com/group/mongodb-user/msg/583d37ef41ef5cca?hl=en