Предпочтительный Путь (потому что это инфраструктура команда; предназначенный, чтобы быть программным):
$ git diff-tree --no-commit-id --name-only -r bd61ad98
index.html
javascript/application.js
javascript/ie6.js
Иначе (менее предпочтительный для сценариев, потому что это фарфор команда; предназначенный, чтобы быть направлением пользователя)
$ git show --pretty="" --name-only bd61ad98
index.html
javascript/application.js
javascript/ie6.js
<час> --no-commit-id
подавляет идентификационный вывод фиксации. --pretty
аргумент указывает пустую строку формата для предотвращения хлама вначале. --name-only
аргумент показывает только имена файлов, которые были затронуты (Спасибо Моток). Используйте --name-status
вместо этого, если Вы хотите видеть то, что произошло с каждым файлом ( Deleted, Modified, А dded) -r
, аргумент должен рекурсивно вызвать в поддеревья CallByBame в основном дает вам «позднюю привязку», которая «выясняет метод во время выполнения», в отличие от «ранней привязки», когда компилятор выясняет это за вас.
С При раннем связывании вы можете быть безопасным по типу и иметь лучшую производительность, поскольку ваш код будет переходить прямо к методу. Компилятор «найдет это» для вас заранее.
При позднем связывании производительность ниже, так как метод просматривается во время выполнения, и у вас нет безопасности типов, что означает, что метод на самом деле может не существовать и вы можете получить исключение. Но это может быть удобно, если вы по какой-то причине не знаете тип объекта. Я также использую его для вызова COM-объекта, если не хочу возиться со сборкой взаимодействия.
CallByName, скорее всего, вызывает Type.InvokeMember. Если вы хотите сделать это напрямую, вот код, который я придумал:
Imports System.Reflection ' For access to BindingFlags '
Friend NotInheritable Class LateBinding
Private Const InvokePublicMethod As BindingFlags = BindingFlags.Public Or BindingFlags.Instance Or BindingFlags.InvokeMethod
Private Const GetPublicProperty As BindingFlags = BindingFlags.Public Or BindingFlags.Instance Or BindingFlags.GetProperty
Public Shared Function InvokeFunction(ByVal oObject As Object, ByVal sName As String, ByVal ParamArray yArguments() As Object) As Object
Return oObject.GetType().InvokeMember(sName, InvokePublicMethod, Nothing, oObject, yArguments)
End Function
Public Shared Function GetProperty(ByVal oObject As Object, ByVal sName As String, ByVal ParamArray yArguments() As Object) As Object
Return oObject.GetType().InvokeMember(sName, GetPublicProperty, Nothing, oObject, yArguments)
End Function
End Class
Если функция CallByName
не кэширует привязки методов, было бы гораздо лучше написать собственный класс диспетчеризации, который хранит хеш-таблицу для сопоставления строк имен с MethodInfo
объектов.