Респект!
Есть только один момент: 64-битные винды нормально (т. е. как с папкой) с вебдавом не работают. Да и переходить на него нет смысла — тут ведь только чтение идет, запись и прочие операции будут невостребованы.
Предлагаю сделать более крутое решение: shell extension + search extension.
Уровни вложенности: Сетевое окружение\DC\Хаб\Юзер\Папки\Файлы.
Взаимодействие с внешним плеером посредством передачи IDataObject-а.
Чат нафиг.
Фичи для висты: In-place поиск, In-place просмотр.
Работа с удаленными файлами получится почти как с локальными, даже не будет чувствоваться убогость обычных клиентов.
Компилятор не заморачивается и делает callvirt для вызовов, в которых точно не известно, что вызывать, без обращения к самому объекту. И речь не только о виртуальных, но также и о перекрывающих (new) методах.
По-хорошему там можно написать call instance void ConsoleApplication2.Test::NonVirtualMethod() и все будет работать. Можете проверить, собрав это ilasm-ом обратно :)
Однако, из самого Test-а его невиртуальные instance-методы вызываются обычным call-ом:
public class Test
{
public void NonVirtualMethod() { }
public virtual void VirtualMethod()
{
NonVirtualMethod();
}
public static void StaticMethod() { }
}
получаем
.method public hidebysig newslot virtual
instance void VirtualMethod() cil managed
{
// Code size 9 (0x9)
.maxstack 8
IL_0000: nop
IL_0001: ldarg.0
IL_0002: call instance void testvirt.Program/Test::NonVirtualMethod()
IL_0007: nop
IL_0008: ret
} // end of method Test::VirtualMethod
А примеры, когда можно смело использовать статику:
1. static Image ResizeImage(Image source, Size newSize)
2. static void ThrowException(int ResourceStringId)
Сюда же некоторые файловые методы: DeleteFile(string path), CopyFile(string source, string dest).
Сюда же обертки для PInvoke-вызовов.
Еще не совсем из этой оперы, но статические методы для вызова непубличных конструкторов.
Ну, я бы не сказал, что проверка на null уж сильно замедляет работу. А вот то, что сборщику мусора не создают дополнительных хлопот — это, конечно, плюс.
Ну и да, меньше геморроя с вызовом — не надо лезть в виртуальную таблицу объекта, чтобы узнать, что именно таки вызывать.
Был и такой плагин, правда, Яббл довольно быстро объяснил автору, что не стОит его распространять.
Вообще, если не Тач/иФон, то можно тупо зайти в папку iPod_Control\Music и скопировать все оттуда, а потом каким-нибудь Tag&Rename или Фубаром привести имена в соответствие тегам. Если иФон/Тач, то есть утилиты типа TouchCopy, которыми можно сделать то же самое.
Ну, и наконец, можно написать свою :)
Есть только один момент: 64-битные винды нормально (т. е. как с папкой) с вебдавом не работают. Да и переходить на него нет смысла — тут ведь только чтение идет, запись и прочие операции будут невостребованы.
Предлагаю сделать более крутое решение: shell extension + search extension.
Уровни вложенности: Сетевое окружение\DC\Хаб\Юзер\Папки\Файлы.
Взаимодействие с внешним плеером посредством передачи IDataObject-а.
Чат нафиг.
Фичи для висты: In-place поиск, In-place просмотр.
Работа с удаленными файлами получится почти как с локальными, даже не будет чувствоваться убогость обычных клиентов.
EF не биндил, а Linq2Sql вполне нормально биндится…
Компилятор не заморачивается и делает callvirt для вызовов, в которых точно не известно, что вызывать, без обращения к самому объекту. И речь не только о виртуальных, но также и о перекрывающих (new) методах.
По-хорошему там можно написать call instance void ConsoleApplication2.Test::NonVirtualMethod() и все будет работать. Можете проверить, собрав это ilasm-ом обратно :)
получаем
А примеры, когда можно смело использовать статику:
1. static Image ResizeImage(Image source, Size newSize)
2. static void ThrowException(int ResourceStringId)
Сюда же некоторые файловые методы: DeleteFile(string path), CopyFile(string source, string dest).
Сюда же обертки для PInvoke-вызовов.
Еще не совсем из этой оперы, но статические методы для вызова непубличных конструкторов.
что так, что эдак будет обращение к инстансу класса.
Можно сделать оба метода, как у File, Directory и прочих.
Один будет сводиться к вызову другого :)
Ну и да, меньше геморроя с вызовом — не надо лезть в виртуальную таблицу объекта, чтобы узнать, что именно таки вызывать.
плюс от меня.
Был и такой плагин, правда, Яббл довольно быстро объяснил автору, что не стОит его распространять.
Вообще, если не Тач/иФон, то можно тупо зайти в папку iPod_Control\Music и скопировать все оттуда, а потом каким-нибудь Tag&Rename или Фубаром привести имена в соответствие тегам. Если иФон/Тач, то есть утилиты типа TouchCopy, которыми можно сделать то же самое.
Ну, и наконец, можно написать свою :)
Давайте уж сразу всех в контейнеры, и если что не так — в слив, нечего от выработки электроэнергии отвлекаться :)
А когда вот так втихаря скачивает, то там да, всякое бывает :)