---
title: "Arv"
type: "forum-thread"
url: "https://www.webforum.nu/amne/dotnet/62733-arv"
topic: ".NET"
topic_url: "https://www.webforum.nu/amne/dotnet"
author: "icaaq"
published: "2002-12-20T08:47:31.000Z"
updated: "2002-12-22T11:22:21.000Z"
replies: 12
views: 479
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/62733-arv"
---

# Arv

## #1 — icaaq, 2002-12-20T08:47Z

Jag håller som bekant på med Databasclasser och tror jag kommit till DataAccessskitet där jag ska ärva lite metoder men då undrar jag hur jag ska skriva för att min ConnenctionString ska ärvas automatiskt. Eller Jag ska fråga om det går för det första??

Jag har kommit hit

```
[red]
using System;
using System.Data;
using System.Data.OleDb;

namespace Meditrix.DataAccess
{
	/// <summary>
	/// Summary description for DataAccess.
	/// </summary>
	public class DataAccess : Icaaq.Data.OleDbData
	{
		[b]//Raden nedanför vill jag ska ärvas in i Icaaq.Data.DataAccess[/b]
		string Connection = @"Provider=Microsoft.Jet.OLEDB.4.0; Data Source=C:\Inetpub\xxx\xxx.mdb";
		
		public DateTime RetriveNewsDate()
		{
            
		}
	}
}
[/red]
```

mvh icaaq
\[redigerade bort private då jag inte tror att den ska vara där \[/redigerat\]
\[redigerade igen\]Förstås ska det vara en Connection \[/redigerade igen\]

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

## #2 — niko, 2002-12-20T09:02Z

Medlemsvariabeln ärvs oavsett om du skriver *private*, *protected* eller *public*.

Skillnaden blir:

Private: Den *ärvs* men du kan inte explicit referera till den i nya eller overridade metoder i dina ärvda klasser.

Protected: Den ärvs och du kan referera till den i dina ärvda klasser (men inte utanför).

Public: Den ärvs och du kan referera till den i dina ärvda klasser (och utanför via punknotation).

Jag skulle tro att det är *protected* du är ute efter.

Däremot så tänker du väl inte hårdkoda själva strängen? Det är bättre att tilldela den via en property eller publik metod (eller i konstruktorn).

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

## #3 — icaaq, 2002-12-20T09:31Z

Jag tänkte ange den i konstruktorn. Det ser ut så här nu

```
[red]using System;
using System.Data;
using System.Data.OleDb;

namespace Meditrix.DataAccess
{
	/// <summary>
	/// Summary description for DataAccess.
	/// </summary>
	public class DataAccess : Icaaq.Data.OleDbData
	{
		//Här nedanför vet jag inte vad jag ska skriva
		string Connection = @"Provider=Microsoft.Jet.OLEDB.4.0; Data Source=C:\Inetpub\xxx\xxx.mdb";
		
		public DateTime RetriveNewsDate()
		{
            
		}
	}
}
[/red]
```

och den ärvda

```
[red]
using System;
using System.Data;
using System.Data.OleDb;

namespace Icaaq.Data
{
	/// <summary>
	/// Summary description for OleDbData.
	/// </summary>
	public abstract class OleDbData
	{
		protected OleDbConnection Connection;
		/// <summary>
		/// A valid connectionstring
		/// </summary>
		/// <param name="ConnectionString"></param>
		public OleDbData(string ConnectionString)
		{
			Connection = new OleDbConnection(ConnectionString);
		}
[/red]
```

mvh icaaq

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

## #4 — icaaq, 2002-12-20T09:40Z

Jag måste läsa lite mer om detta med arv..... jag återkommer till er när jag vet mer :OO

Men vill ni hjälpa till så är det bara att posta vidare

mvh icaaq

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

## #5 — niko, 2002-12-20T09:47Z

Ja, fast nu förstår jag inte riktigt. I din basklass så är ju *Connection* av typen **string** och i din ärvda klass är den definierad som **OleDbConnection**. Om du gör så så omdefinierar du ju medlemsvariabeln.

Om du avser att använda *samma* medlemsvariabel i din ärvda klass så ska du inte deklarera om den. Den kommer att vara tillgänglig ändå om den är deklarerad som tex *protected* i basklassen.

RED. OK. Såg inte att du svarat emellan.

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

## #6 — icaaq, 2002-12-20T09:50Z

> **icaaq skrev:**
>
> //Här nedanför vet jag inte vad jag ska skriva

 ;)

\*testar vidare\*

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

## #7 — h0lger, 2002-12-20T15:50Z

Lägg connectionstringen i en konfig fil istället. Då slipper du kompilera om den dagen du byter inloggningsid eller db etc.

I din generella db-klass som du ärver in i de andra db-klasserna skapar du en property som sätter connection-stringen genom att läsa upp strängen från config filern.

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

## #8 — icaaq, 2002-12-20T16:32Z

ok.....

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

## #9 — icaaq, 2002-12-20T18:54Z

i test syfte har jag fortsatt med detta och kommit så här långt

```
[red]
using System;
using System.Data;
using System.Data.OleDb;

namespace Meditrix.DataAccess
{
	/// <summary>
	/// Summary description for DataAccess.
	/// </summary>
	public class DataAccess : Icaaq.Data.OleDbData
	{
		public DataAccess() : base(@"Provider=Microsoft.Jet.OLEDB.4.0; Data Source=C:\Inetpub\xxxxxx")
		{}
		
		public DateTime RetriveNewsDate()
		{
			string SqlStatement = "SELECT TOP 1 f_date FROM news ORDER BY pk_id DESC";
			OleDbDataReader DataReader = RetriveDataReader(SqlStatement);
			if(DataReader.Read())
			{
				DateTime newsDate = (DateTime)DataReader["f_date"];
				DataReader.Close();
				return newsDate;
			}
			else
			{
				return DateTime.Now;
			}
		}
	}
}
[/red]
```

Sen har jag denna class som ska hämta RetriveNewsDate men det är här jag inte får till det

```
[red]
using System;
using Meditrix.DataAccess;

namespace Meditrix.Business
{
	/// <summary>
	/// Summary description for news.
	/// </summary>
	public class news
	{
		private DateTime _newsDate = DataAccess.RetriveNewsContent;

		public news()
		{
			//
			// TODO: Add constructor logic here
			//
		}
	}
}
[/red]
```

Jag tänkte alltså i köra RetriveNewsDate men polleten rammlar inte ner.....hur ska jag göra

mvh [icaaq](http://member.webforum.nu/1123/icaaq.gif)

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

## #10 — icaaq, 2002-12-20T18:59Z

Måste tänka om lite........brb

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

## #11 — h0lger, 2002-12-20T19:24Z

Du har en metod i din db klass som heter 

```
RetriveNewsDate
```

Men i koden anropar du

```
DataAccess.RetriveNewsContent
```

Kan det ha med detta att göra?

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

## #12 — icaaq, 2002-12-20T19:38Z

Nej ....det är jag som blandat ihop kodbitarna här på wF bara...

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

## #13 — h0lger, 2002-12-22T11:22Z

Jag har ett vb exempel på hur jag tänker. Nu har jag grejat lite i det utan att testa det helt men jag tror att ni kan se mina tankar där.

Bygger på 2 assemblys. En för presentations skiktet och en för business och dataaccess skikten. Egentligen bör dataaccess skiktet ligga i en egen assembly.

Bilagor:

- [projekttid.zip](https://www.webforum.nu/a/852.zip)

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

---

Tråden på webben: https://www.webforum.nu/amne/dotnet/62733-arv
