webForumDet fria alternativet

abstract class

10 svar · 386 visningar · startad av skyman

skymanMedlem sedan juli 20012 450 inlägg
#1

Jag har en WebUserControl som heter Citiesctrl som är en abstrakt class.

	
public abstract class Citiesctrl : System.Web.UI.UserControl
{
 public System.Web.UI.WebControls.DropDownList DropDownList1;
 public System.Web.UI.WebControls.CheckBox CheckBox1;
 public System.Web.UI.WebControls.Button Button1;
 public System.Web.UI.WebControls.DropDownList DropDownList2;
...

Sen försöker jag göra en instans av den från en annan WebUserControl (Controlctrl):

controls.Citiesctrl cc = new controls.Citiesctrl();

men då får jag felet att jag inte kan göra en instans av den abstrakta klassen. Varför kan man inte göra det? Det gick ju hur bra som helst att skriva det i Microsoft Visual C#.NET, alltså hjälpen fungerade.

JonMedlem sedan juli 20011 304 inlägg
#2

Att en klass är abstrakt betyder just att man inte ska kunna instansiera objekt ur den så det är inte så underligt att du inte får göra det :)

Men det ska ju gå att skriva abstrakta klasser så det är riktigt att kompilatorn inta ska klaga när du skriver den.

skymanMedlem sedan juli 20012 450 inlägg
#3

Ok. Det är det det betyder.
Men kan man ändra till någon annan sorts klass?
Jag provade att ta bort abstract men den kunde fortfarande inte göra en instans, men det klagade inte på på min instans-kod-rad utan senare i koden då jag använder mig av instansen.

JonMedlem sedan juli 20011 304 inlägg
#4

Hmm... ska erkänna att jag inte är så jätteinsatt...
Ger dig en länk att suga på. Hoppas att den är til nån nytta.

http://www.oreilly.com/catalog/progaspdotnet/chapter/ch14.html

skymanMedlem sedan juli 20012 450 inlägg
#5

*dyker ner i texten* ;)
det var en del att läsa...

skymanMedlem sedan juli 20012 450 inlägg
#6

Jag flyttade funktionen till den webcontrollen som jag försökte göra en instans av istället och körde this. istället.
Då slapp jag det problemet... för denna gången.

PeWMedlem sedan juni 200010 432 inlägg
#7

Tanken med abstrakta klasser är ju att det ska vara ett interface / gränssnitt / superklass. Den abstrakta klassen blir då bara en slags deklaration av hur barnklasserna ska fungera. Du får helt enkelt ärva ned den abstrakta klassen till en egen klass med de metoder som finns deklarerat i den abstrakta och sen använder du dig av din egna klass till att skapa instanser.

skymanMedlem sedan juli 20012 450 inlägg
#8

Jag ska göra en till class för den controllen som har samma mtoder som den abstrakta, som jag istället kan göra instanser av?

PeWMedlem sedan juni 200010 432 inlägg
#9

Precis.
Fördelen med detta är att man kan ha flera klasser som ärver av den abstrakta men att de representerar olika saker. Man kan då få samtliga "under samma" kontroll m.h.a dynamisk bindning. Den abstrakta blir en datatyp som hanterar subklasserna. (de metoder som ingår i den abstrakta)

skymanMedlem sedan juli 20012 450 inlägg
#10

Det låter ju riktigt bra. Så har jag inte tänkt alls...
Jag har denna abstrakta class nu:

public abstract class Datectrl : System.Web.UI.UserControl{}

Om jag nu vill göra en class i den controllen, hur skriver jag då för att den skall fungera som nu nämde?

SPiNMedlem sedan mars 20007 896 inlägg
#11
public class NyKlass : datectrl {
...

Skulle jag gissa på, för du ville väl ärva från den abstrakta superklassen? :q

135 ms totalt · 3 externa anrop · v20260731065814-full.fb544a5a
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
132 ms — hämta tråd, inlägg och bilagor (db)