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.
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.
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.
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.
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)