Как перевести указанную c строку кода с C# на VB.net - PullRequest
1 голос
/ 12 июля 2020

Я нашел в Интернете очень многообещающий код и хотел бы попробовать его. Поскольку мой проект написан на VB.net, а рассматриваемый код - на C#, я начал переводить нужные мне фрагменты в VB. net. Я закончил с переводом, но я не могу понять, что именно делает одна конкретная c строка кода и как перевести это на VB. net. И у меня нет идей, как сформулировать поиск по Google, чтобы, возможно, сам найти ответ.

Так что, может быть, вы сможете пролить свет на мистику C#? C# исходный код (урезанный до соответствующих бит):

public class TestClass
{
    private ListView listView;

    public TestClass(ListView input)
    {
        this.listView = input;
        this.listView.Loaded += new RoutedEventHandler(ListViewLoaded);
        this.listView.Unloaded += new RoutedEventHandler(ListViewUnloaded);
    }

    public static readonly DependencyProperty EnabledProperty = DependencyProperty.RegisterAttached(
        "Enabled",
        typeof(bool),
        typeof(TestClass),
        new FrameworkPropertyMetadata(new PropertyChangedCallback(OnEnabledChanged)));

    private static void OnEnabledChanged(DependencyObject obj, DependencyPropertyChangedEventArgs e)
    {
        ListView input = obj as ListView;
        new TestClass(input);   // <== this is the mystic line
    }
}

Я борюсь с последней строкой кода в процедуре stati c OnEnabledChanged. Похоже, что конструктор этого класса вызван, но результат ни к чему не привязан.

Перевод этого в VB. net просто New TestClass(input) приводит к синтаксической ошибке.

Я пробовал несколько автоматических c переводчиков на inte rnet, но они возвращают только New TestClass(input), поэтому они такие же умные (или ничего не знающие), как и я.

Так вы можете мне сказать, что эта строка кода предназначена для того, чтобы я мог перевести ее на рабочий VB. net?

1 Ответ

1 голос
/ 12 июля 2020

Если линия изолирована, то есть: на самом деле это просто new TestClass(input);, это может быть предназначено для запуска некоторого кода конструктора, возможно, некоторой stati c инициализации.

Хотя это плохая практика, вы может перевести его в VB, просто сохранив во временном объекте. Результат эквивалентен.

Итак, вместо: New TestClass(input)

Dim temp = New TestClass(input)

Итак, в общем, о строке mysti c:

private static void OnEnabledChanged(DependencyObject obj, DependencyPropertyChangedEventArgs e)
{
    ListView input = obj as ListView;
    new TestClass(input);   // <== this is the mystic line
}

Она создает объект TestClass и вызывает его конструктор, передавая ListView. Результат отбрасывается.

Как уже упоминалось: к входу применено действие. Хотя это действительно плохая практика; вы теряете ссылку на объект, который изменяет список ввода. Его действия трудно отменить - и может быть трудно отладить.

Но; это также означает, что вы не можете пропустить строку.

...