Нет разницы между ByVal и ByRef в .NET? [Дубликат]

Вы можете определить PagerAdapter как это, тогда вы сможете получить любой Fragment в ViewPager.

private class PagerAdapter extends FragmentPagerAdapter {
    private final List<Fragment> mFragmentList = new ArrayList<>();

    public PagerAdapter(FragmentManager fm) {
        super(fm);
    }

    @Override
    public Fragment getItem(int position) {
        return mFragmentList.get(position);
    }

    @Override
    public int getCount() {
        return mFragmentList.size();
    }

    public void addFragment(Fragment fragment) {
        mFragmentList.add(fragment);
    }
}

Чтобы получить текущий Fragment

Fragment currentFragment = mPagerAdapter.getItem(mViewPager.getCurrentItem());
2
задан tmighty 17 January 2019 в 01:47
поделиться

1 ответ

Что вам не хватает, так это то, что для ссылочных типов ByRef влияет только на то, влияет ли назначение нового объекта на параметр исходной переменной, а не на то, влияет ли изменение объекта, на который ссылается параметр, на исходную переменную.

Думайте об этом так. Допустим, у вас есть команда, а Джо является капитаном этой команды. Вам нужно отправить кого-то в комнату, чтобы выполнить задачу. Вы говорите: «Давай возьмем капитана и отправим их», поэтому вы берете Джо и отправляете его в комнату. В комнате кто-то просит Джо снять синюю рубашку, которую он носит, и надеть красную, затем они решают, что Джо может сесть, и они фактически заставят Эндрю, который уже был в комнате, вместо этого выполнить задание. , Значит ли это, что Эндрю теперь капитан вашей команды? Конечно, нет. Тот факт, что они использовали другого человека для выполнения задачи внутри комнаты, не влияет ни на что за пределами комнаты, поэтому Джо по-прежнему является капитаном команды. Когда вы увидите, как Джо выходит из комнаты, он будет одет в красную рубашку, которую попросили его надеть. Изменения, внесенные в самого Джо в комнате, все еще влияют на Джо за пределами комнаты. Именно так ByVal работает с параметрами ссылочного типа в .NET.

Чтобы этот сценарий реального мира работал, как при использовании ByRef в .NET, вы должны признать, что если кто-то другой выполнит задание в комнате вместо Джо, он станет капитаном вашей команды. Такого рода вещи практически никогда не происходят в реальном мире, поэтому ByRef является странностью в VB.NET, языке OO, а ByVal - поведение по умолчанию.

0
ответ дан jmcilhinney 17 January 2019 в 01:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: