powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / base.base.Method
15 сообщений из 15, страница 1 из 1
base.base.Method
    #32552972
Ihor Bobak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Простите за примитивный вопрос (смотрите всередине MyClass.SomeVirtualMethod):
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
public class SuperBase
{
	protected virtual void SomeVirtualMethod()
	{
		...
	}
}

public class Base
{
	protected override void SomeVirtualMethod()
	{
		...
	}
}

public class MyClass
{
	protected override void SomeVirtualMethod()
	{
		// ЧТО ДОЛЖНО БЫТЬ ЗДЕСЬ, ЧТОБЫ ВЫЗВАТЬ SuperBase.SomeVirtualMethod?
		// НАДО ЧТО-ТО ТИПА 
		// base.base.SomeVirtualMethod()
		// но так не работает.
	}
}
...
Рейтинг: 0 / 0
base.base.Method
    #32553045
Dronopotamus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
так низя в c#:)
...
Рейтинг: 0 / 0
base.base.Method
    #32553079
Ihor Bobak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Знаю, что можно через reflection, но не хочу так делать.

Если бы метод был public, сделал бы
Код: plaintext
1.
SuperBase o = (SuperBase)this;
o.SomeVirtualMethod();

почему-то не верится, что не существует нормального способа...
...
Рейтинг: 0 / 0
base.base.Method
    #32553111
Dronopotamus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
по нормальному нельзя. Тут уже обсуждался помоему этот вопрос. Есть мнение, что если возникает такая ситуация - надо перепроектировать классы.
...
Рейтинг: 0 / 0
base.base.Method
    #32553114
qu-qu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dronopotamusтак низя в c#:)

Если хорошо учить матчасть, то многие "низя" превращаются в "немножко можно"...

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
public class Test {

public static void Main(string[] args) {
	SuperBase s1 = new SuperBase();
	Base b1 = new Base();
	MyClass m1 = new MyClass();

	s1.SomeVirtualMethod();
	b1.SomeVirtualMethod();
	m1.SomeVirtualMethod();
	}
}

public class SuperBase
{
	public virtual void SomeVirtualMethod()
	{
		System.Console.WriteLine("SuperBase has invoked!");
	}
}

public class Base : SuperBase
{
	public override void SomeVirtualMethod()
	{
		System.Console.WriteLine("Base has invoked!");
	}
}

public class MyClass : Base
{
	public new void SomeVirtualMethod()
	//     ^^^ вот сюда обратить особое внимание...
	{
		System.Console.WriteLine("MyClass has invoked with SuperBase additions!");
	    ((SuperBase)this).SomeVirtualMethod();
	//  ^^^^^^^^^^^  и сюда не мешало бы..
	}
}

Если "замещать" (override) виртуальный метод супер-класса, то тады действительно "низя", а если "скрывать" (new или ничего не писать) - то "немножко можно"...
...
Рейтинг: 0 / 0
base.base.Method
    #32553120
qu-qu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ihor BobakЗнаю, что можно через reflection, но не хочу так делать.

Если бы метод был public, сделал бы
Код: plaintext
1.
SuperBase o = (SuperBase)this;
o.SomeVirtualMethod();


пардон, не обратил внимания, что метод - protected... (счаз попробую с ним)

А то, что вы хотите сделать на "замещенном" (override) методе с приведением this на SuperBase - приведет к бесконечному циклу вызовов MyClass.SomeVirtualMethod() (только что проверял).
...
Рейтинг: 0 / 0
base.base.Method
    #32553128
Dronopotamus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
угу и чего получится?

Код: plaintext
1.
MyClass c = new MyClass();
с.SomeVirtualMethod();

MyClass has invoked with SuperBase additions!
Base has invoked!

метод то виртуальный :) или предлагаешь в Base тоже new написать?

а вообщето там методы protected

знаток матчасти, хех
...
Рейтинг: 0 / 0
base.base.Method
    #32553144
qu-qu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dronopotamus
метод то виртуальный :) или предлагаешь в Base тоже new написать?


А почему бы и нет? Если есть задача "пробиться" к методам супер-класса - можно и в Base написать new (своя же рука пишет).

Dronopotamus
а вообщето там методы protected


про это я уже "оговорился"... тороплюсь, понимаешь... с protected все гораздо хуже, чем я ожидал... :(((

Dronopotamus
знаток матчасти, хех


да и ладно, не претендую...
...
Рейтинг: 0 / 0
base.base.Method
    #32553281
Ihor Bobak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну уж не думал, что будет столько ответов. Расскрываем занавес:

SuperBase = System.Web.UI.WebControls.Image,

Base = System.Web.UI.WebControls.ImageButton,

MyClass = public class XPImageButton: ImageButton.

SomeVirtualMethod = protected override void AddAttributesToRender

То есть, нужно из моего XPImageButton.AddAttributesToRender вызвать напрямую Image.AddAttributesToRender и НЕ вызвать ImageButton.AddAttributesToRender. Менять код классов Image и ImageButton нельзя.
...
Рейтинг: 0 / 0
base.base.Method
    #32553559
qu-qu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ihor BobakМенять код классов Image и ImageButton нельзя.

Кто бы сомневался...

Вот начинают люди "темнить", и создается такое впечатление, что чел. хочет "пробиться" в супер-класс своего собственного изготовления... (оттого и советы такие, по принципу - "каков вопрос таков и ответ", лишь бы "принцип решения" показать).

Ну а насчет AddAttributesToRender, похоже, что ничего другого не остается, как - написать 3 потомка-"враппера" для каждого из классов CLR и добавить в них свои public методы типа My AddAttributesToRender (один virtual и 2 new), в которых вызывать "родной" AddAttributesToRender.

З.Ы. это "быстрый" путь, не уверен, что чересчур правильный...
("медленный" - продолжать изыскания)
...
Рейтинг: 0 / 0
base.base.Method
    #32553579
qu-qu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[quot qu-qu... написать 3 потомка-"враппера" для каждого из классов CLR и добавить в них свои public методы типа My AddAttributesToRender ...[/quot]

Хотя, нет, бред какой-то написал, похоже... это уже "множественное наследование" получается...
...
Рейтинг: 0 / 0
base.base.Method
    #32553621
qu-qu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати, насчет этого пассажа:
Ihor Bobak... вызвать напрямую Image.AddAttributesToRender и НЕ вызвать ImageButton.AddAttributesToRender ...
А вы уверены, что реализации AddAttributesToRender у классов Image и ImageButton чем-то отличаются друг-от-друга и/или от реализации этого же метода в WebControl?

К чему огород-то весь городить?
Мне даже интересно стало, что такое может сделать Image .AddAttributesToRender чего не в состоянии сделать ImageButton .AddAttributesToRender?
...
Рейтинг: 0 / 0
base.base.Method
    #32553939
Ihor Bobak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для тех, кто не знает: есть такой проэкт Mono - ".NET for Linux". Его модель классов и поведение методов/свойств совпадает с родным .NET. Вдобавок есть исходники.

Так вот, в Image:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
		protected override void AddAttributesToRender(HtmlTextWriter writer)
		{
			base.AddAttributesToRender(writer);
			if(ImageUrl.Length >  0 )
			{
				writer.AddAttribute(HtmlTextWriterAttribute.Src, ResolveUrl(ImageUrl));
			}
			if(AlternateText.Length >  0 )
			{
				writer.AddAttribute(HtmlTextWriterAttribute.Alt, AlternateText);
			}
			if(BorderWidth.IsEmpty)
			{
				writer.AddAttribute(HtmlTextWriterAttribute.Border, "0");
			}
			if(ImageAlign != ImageAlign.NotSet)
			{
				writer.AddAttribute(HtmlTextWriterAttribute.Align, Enum.Format(typeof(ImageAlign), ImageAlign, "G"));
			}
		}

в ImageButton:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
protected override void AddAttributesToRender(HtmlTextWriter writer)
		{
			writer.AddAttribute(HtmlTextWriterAttribute.Type, "image");
			writer.AddAttribute(HtmlTextWriterAttribute.Name, UniqueID);
			if(Page != null && CausesValidation)
			{
				if(Page.Validators.Count >  0 )
				{
					writer.AddAttribute(HtmlTextWriterAttribute.Onclick, Utils.GetClientValidatedEvent(Page));
					writer.AddAttribute("language", "javascript");
				}
			}
			base.AddAttributesToRender(writer);
		}


Поведение ImageButton - то что надо для моего потомка XPImageButton, вот только тот факт, что он рендерит <input type=image> меня не устраивает (долго объяснять почему - можем отркрыть для этого другой топик). Поэтому делаю так: перекрываю его TagKey (чтобы рендерился <img> а не <input type="image">) и перекрываю AddAttributesToRender, в котором надо сделаь:

1) onclick=__doPostBack(...) - без проблем
2) вызвать base.base.AddAttributesToRender, который рендерит все остальные атрибуты Image и WebControl.

Вопрос: а почему нельзя вызвать base.AddAttributesToRender? Ответ - два лишних атрибута (type и name) будет выведено в <img> :(
...
Рейтинг: 0 / 0
base.base.Method
    #32553953
Dronopotamus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ihor Bobak
SuperBase = System.Web.UI.WebControls.Image,

Base = System.Web.UI.WebControls.ImageButton,

MyClass = public class XPImageButton: ImageButton.

SomeVirtualMethod = protected override void AddAttributesToRender



имхо единственный вариант - наследоваться от Image и реализовывать всё, что есть в ImageButton + свой AddAttributesToRenderer. Я посмотрел декомпилером - там не много!
Короче рефлектор тебе в помощь :)
...
Рейтинг: 0 / 0
base.base.Method
    #32554070
qu-qu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ihor Bobak... два лишних атрибута (type и name) будет выведено в <img> :(
Это, наверное, для тех было написано, кто исходники читать не умеет...

Вопрос в следующем, вы используете Mono просто как пример того, что реализации методов AddAttributesToRender про которые я спрашивал - действительно разные, или вы его используете как "платформу" для своей разработки?

Хотя, вряд ли как "платформу", т.к. и топика данного - тогда не должно было быть... (добавил новый класс с нужной функциональностью и "дело в шляпе"). Впрочем, и на "родном" ASP.NET это не возбраняется, можете из того же Mono взять исходники нужных вам классов и дописать к ним необходимую функциональность на собственных public методах, в собственных реализациях типов MyImage, MyImageButton, MyClass...

З.Ы. как говорится: "вам главное шашечки, или - ехать?"
...
Рейтинг: 0 / 0
15 сообщений из 15, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / base.base.Method
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]