User 13204940 Ответов: 1

Хитрая проблема наследования


Привет
У меня есть класс FilterableList(Of T As CodeElement).

FilterableList (Of T As CodeElement) имеет статический метод, к которому я хочу получить доступ.

Все, что я знаю в данный момент времени, - это GetType (T). Я знаю, что мне нужно сделать что-то вроде;

FilterableList(Of ???).method()


Но я не могу понять, как преобразовать из T в сам класс.

- Рикс

Что я уже пробовал:

....................................................

1 Ответов

Рейтинг:
1

OriginalGriff

Вы, кажется, запутались: класс FilterableList имеет методы, которые не связаны с общим параметром. Чтобы получить доступ к методам CodeElement, необходимо указать ограничение на то, какими классами могут быть T:

Public Class FilterableList(Of T As CodeElement)
	Inherits List(Of T)
...
	Public Sub DoSomething(x As T)
		x.MyMethod()
	End Sub
End Class


Я пытаюсь отменить функцию GetType (), чтобы получить доступ к статическому методу - вот почему я не считаю, что мне нужен экземпляр.

GetType (CodeElement) возвращает свой тип; могу ли я получить класс этого типа и затем получить доступ к его методам?


Для статических методов вам не нужен GetType

Кодовый элемент.MyStaticMethod()

это все, что вам нужно. Вы можете получить доступ к статическим (совместно используемым в VB talk) методам непосредственно через имя класса и даже получить доступ к методам базового класса таким образом:
Public Class B
	Public Shared Sub MyBaseMethod()
	End Sub
End Class
Public Class D
	Inherits B
	Public Shared Sub MyMethod()
	End Sub
End Class
Private Sub MyButton_Click(sender As Object, e As EventArgs)
	B.MyBaseMethod()
	D.MyBaseMethod()
	D.MyMethod()
End Sub


[no name]

Давайте возьмем такой пример:

x = GetType(MyCodeElement)

Как получить MyCodeElement из x?

OriginalGriff

- Простите?
В этом нет никакого смысла.
GetType возвращает значение типа Type-и у вас уже есть MyCodeElement, прежде чем вы его вызовете...

Я не пытаюсь быть раздражающим здесь, но мы получаем только то, что вы печатаете для работы, мы не получаем никакого другого контекста, и мы не можем видеть ваш экран, получить доступ к вашему жесткому диску или прочитать ваши мысли. Таким образом, предоставление фрагментов кода одной строки без какого-либо другого контекста на самом деле не помогает нам помочь вам!

[no name]

Тип CodeElement передается через различные классы и методы, и в конечном итоге сам CodeElement выходит за рамки области действия, так что все, что у меня есть, - это его тип.

OriginalGriff

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

Я думаю, что вы многое упускаете здесь, и это не помогает нам помочь вам быстрее.
Если CodeElement является типом, то вам не нужен GetType, но вы не можете использовать методы экземпляра класса (или это базовый класс), потому что у вас нет экземпляра для их работы. Вы можете без проблем называть его статическими классами, так как они не требуют экземпляра.
Но чтобы получить экземпляр в "x", вам нужно либо найти существующий экземпляр, либо создать его - вы не можете сделать ничего особенно полезного только с информацией о типе, которую возвращает GetType.

Чего вы на самом деле пытаетесь достичь? Игнорируйте ваши конкретные типы, когда вы отвечаете и используете английский, или все, что я получу, - это еще один контекстно-свободный фрагмент кода, который никому не поможет!

[no name]

Я пытаюсь отменить функцию GetType (), чтобы получить доступ к статическому методу - вот почему я не считаю, что мне нужен экземпляр.

GetType (CodeElement) возвращает свой тип; могу ли я получить класс этого типа и затем получить доступ к его методам?

OriginalGriff

Ответ обновлен

[no name]

Это больно. У меня есть только такой тип. Как мне получить от него урок?

OriginalGriff

У меня на лбу тоже синяки! :смеяться:
Что, если мы вернемся к началу, и вы объясните по-английски, что вы делаете, без участия каких-либо классов, типов или экземпляров? Обзор, как если бы вы объяснялись с матерью по телефону?

[no name]

Я хочу перевернуть GetType().

OriginalGriff

Добавился еще один синяк...

Ты уже говорил мне об этом, пару сообщений назад...

[no name]

Хорошо. Чтобы получить тип класса, вы делаете GetType(MyClass)
Чтобы получить класс, что вы делаете с указанным типом?