Хранение ссылки в c # - PullRequest
       1

Хранение ссылки в c #

2 голосов
/ 07 декабря 2011

У меня такое чувство, что я собираюсь получить много комментариев "YOU N000B" по этому поводу.

У меня есть этот класс:

public partial class FindAndReplace : Form
{
    public FindAndReplace()
    {
        InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {

    }
}

и я хочу иметь возможность сделать что-то подобное, чтобы сохранить ссылку для использования в других функциях:

public partial class FindAndReplace : Form
{
    SomeRefType m_TabRef; // Dont know what type to use
    public FindAndReplace(ref TabControl launguageTabs)
    {
        InitializeComponent();
        m_TabRef = languageTab;
    }

    private void button1_Click(object sender, EventArgs e)
    {
        // use m_TabRef here that will change the original I passed in
    }
}

Одно из возможных решений - использовать копию TabControl и вернуть позиции, которые я хочу пометить. Мне просто интересно, смогу ли я использовать оригинал.

Считаю, что этот пост может быть полезен, если люди тоже гуглили его.

Если бы это был C ++, это было бы легко: /

Ответы [ 4 ]

5 голосов
/ 07 декабря 2011

Поскольку TabControl уже является ссылочным типом, вы можете просто использовать его:

TabControl m_TabRef;

public FindAndReplace(TabControl launguageTabs)
{
    m_TabRef = languageTab;

    // from now m_TabRef references the object instance
    // passed as launguageTabs reference
}
3 голосов
/ 07 декабря 2011

В C # классы являются ссылочными типами.Так что languageTabs похоже на указатель на объект, а не на сам объект.Поэтому вы можете просто написать это:

public partial class FindAndReplace : Form
{
    TabControl m_TabRef; // use TabControl 
    public FindAndReplace(TabControl launguageTabs)
    {
        InitializeComponent();
        m_TabRef = languageTab;
    }
}

Это отличается от struct s в C #, которые являются типами значений.Типы значений передаются по значению по умолчанию, и именно здесь используется ключевое слово ref. Не следует использовать ключевое слово ref, если вы действительно не знаете, что оно делает;в большинстве случаев вам это не понадобится.

2 голосов
/ 07 декабря 2011

Вы не можете иметь ref члена класса;ref допустимо только в качестве модификатора параметра функции.

Более того, вполне вероятно, что вы перепутали концепцию передачи по ссылке (которая раскрывается через ref) с концепцией ссылочного типа (котораяпредоставляется через классы, которые являются ссылочными типами).

По всей вероятности, вы можете просто забыть о существовании ref, удалить все такие ссылки из вашего кода, и он будет работать так, как вы планировали.Если это не так, пожалуйста, более конкретно о том, что вы пытаетесь достичь.

0 голосов
/ 07 декабря 2011

Эта ссылка поможет только как передача по ссылке, это НЕ ссылочный тип.

(http://msdn.microsoft.com/en-us/library/14akc2c7.aspx)

Вы сказали, что хотите "сохранить ссылку"

Здесь есть двойной пост: Хранение ссылки в c #

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...