---
title: "Ang. konstruktorer och instansiering"
type: "forum-thread"
url: "https://www.webforum.nu/amne/dotnet/89433-ang-konstruktorer-och-instansiering"
topic: ".NET"
topic_url: "https://www.webforum.nu/amne/dotnet"
author: "Prästen"
published: "2003-11-01T20:26:21.000Z"
updated: "2003-11-02T01:09:12.000Z"
replies: 9
views: 632
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/dotnet/89433-ang-konstruktorer-och-instansiering"
---

# Ang. konstruktorer och instansiering

## #1 — Prästen, 2003-11-01T20:26Z

Hallo. En snabb fråga bara.

OleDbDataReader objDataReader;

Hur kommer det sig att OleDbDataReader ej behöver instansieras med en konstruktor tex såhär:
OleDbDataReader objDataReader=new OleDbDataReader(); ?

Permalänk: https://www.webforum.nu/p/89433

## #2 — Josef, 2003-11-02T00:00Z

Det behöver den...? :q

Permalänk: https://www.webforum.nu/p/1196263

## #3 — Prästen, 2003-11-02T00:36Z

men jag gör ju bara såhär:

OleDbDataReader objDataReader=null;

Permalänk: https://www.webforum.nu/p/1196266

## #4 — SPiN, 2003-11-02T00:38Z

Ja, och då är inte objektet objDataReader instansierat. Du måste på något sätt skapa en instans, antingen via någon metod i en klass som gör det åt dig, eller själv genom att använda new OleDbDataReader().

Permalänk: https://www.webforum.nu/p/1196267

## #5 — Prästen, 2003-11-02T00:40Z

men det behövs ju inte verkar det som, här är en lite snippet från MSDN dokumentationen.

```
public void ReadMyData(string myConnString) {
   string mySelectQuery = "SELECT OrderID, CustomerID FROM Orders";
   OleDbConnection myConnection = new OleDbConnection(myConnString);
   OleDbCommand myCommand = new OleDbCommand(mySelectQuery,myConnection);
   myConnection.Open();
   OleDbDataReader myReader;
   myReader = myCommand.ExecuteReader();
   // Always call Read before accessing data.
   while (myReader.Read()) {
      Console.WriteLine(myReader.GetInt32(0) + ", " + myReader.GetString(1));
   }
   // always call Close when done reading.
   myReader.Close();
   // Close the connection when done with it.
   myConnection.Close();
```

Permalänk: https://www.webforum.nu/p/1196268

## #6 — Prästen, 2003-11-02T00:41Z

och det går heller inte att instansiera OleDbDataReader såhär: 

OleDbDataReader objDataReader=new OleDbDataReader();

eftersom den saknar en konstruktor.
finns inget att instansiera liksom 
 :l

Permalänk: https://www.webforum.nu/p/1196269

## #7 — SPiN, 2003-11-02T00:43Z

Metoden ExecuteReader() i klassen OleDbCommand skapar en instans av klassen OleDbDataReader och returnerar sedan den. Därför kan du sedan använda den. Du kan aldrig använda ett objekt som du har tilldelat null. Det är alltså metoden ExecuteReader() som sköter all instansiering åt dig, men den sker utan att du behöver bry dig. :)

Permalänk: https://www.webforum.nu/p/1196270

## #8 — SPiN, 2003-11-02T00:44Z

Den saknar inte konstruktor, utan den är antagligen deklarerad som privat eller skyddad ( **private** eller **protected** alltså ). Endast den egna klassen eller en subklass kan då skapa en instans av klassen OleDbDataReader. Instansiering måste ske för att man ska kunna använda ett objekt.

Permalänk: https://www.webforum.nu/p/1196271

## #9 — Prästen, 2003-11-02T00:50Z

men va skumt, en annan klassmetod sköter instansieringen av ett annat objekt, vad kallas det och var kan man läsa lite om det?.

Permalänk: https://www.webforum.nu/p/1196272

## #10 — SPiN, 2003-11-02T01:09Z

Ja du, jag vet inte om det har något namn eller om man kan läsa någonstans om det. Men det är inte så krångligt, det är i stort sett som vanlig instansiering. Se följande klasser.

```
class MyA {
     private MyA() { }

     public static MyA getInstance() {
          MyA myinstance = new MyA(); // Endast den egna klassen kan komma åt konstruktorn i MyA som deklarerades privat
          return myinstance;
     }
}

class MyB {
     public void Something() {
          MyA mya = new MyA(); // Fungerar [b]inte[/b], eftersom att konstruktorn för MyA deklarerades privat
          MyA mya = MyA.getInstance(); // Fungerar, eftersom att metode returnerar en instans av klassen MyA
     }
}
```

Följande bör fungera smärtfritt också:

```
class MyA {
     protected MyA() {}

     ...
}

class MyB : MyA {
     public MyA createMyAInstance() {
          MyA mya = new MyA();
          return mya;
     }
}

class MyC {
     public void Something() {
          MyB myb = new MyB();
          MyA mya = myb.createMyAInstance();
     }
}
```

Eftersom att konstruktorn för MyA är deklarerad **protected** så kommer endast subklasser åt den. På det här sättet fungerar det troligtvis med OleDbCommand och OleDbDataReader.

Permalänk: https://www.webforum.nu/p/1196276

---

Tråden på webben: https://www.webforum.nu/amne/dotnet/89433-ang-konstruktorer-och-instansiering
