---
title: "public/pirvate/dim etc"
type: "forum-thread"
url: "https://www.webforum.nu/amne/dotnet/65673-public-pirvate-dim-etc"
topic: ".NET"
topic_url: "https://www.webforum.nu/amne/dotnet"
author: "P"
published: "2003-01-21T15:50:38.000Z"
updated: "2003-01-22T08:19:47.000Z"
replies: 12
views: 421
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/65673-public-pirvate-dim-etc"
---

# public/pirvate/dim etc

## #1 — P, 2003-01-21T15:50Z

Vad är skilladen på dessa? 
Hittade detta: 
Private – callable only by code within our class 
Friend – callable only by code within our project/component 
Public – callable by code outside our class 
Protected – new to VB.NET; we’ll discuss this later when we cover inheritance 
Protected Friend – callable only by code within our project/component and by code in our subclasses; we’ll discuss this later when we cover inheritance

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

## #2 — P, 2003-01-21T16:00Z

skriver något annat här då...

jo har sökt lite på forumet efter "db wrapper" men hittar inget. Vet att det finns! gahh!

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

## #3 — h0lger, 2003-01-21T19:58Z

Private - Kan endast anropas innifrån den klassen den ligger i.
Friend - Kan anropas från hela ditt projekt
Public - Kan anropas från kod utanför (och i) din klass. Kan även anropas via COM+ etc.
Protected - Denna funktion kan endast kommas åt via arv. Dvs. har du en bas-klass med en metod som är Protected kan du endast komma åt metoden genom att först ärva bas-klassen.
Protected Friend - Samma som ovan dock kan hela ditt projekt även anropa den som "vanlig"

Exempel

\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*
Public

```
Public Class News
Public sub GetNews()

End Sub
End Class
------------
Annan klass

dim oNews as new News
oNews.GetData
----------
Från .aspx
dim oNews as new News
oNews.GetNew()
```

\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*
Friend

```
Public Class News
Friend sub GetNews()

End Sub
End Class

------------
Annan klass

dim oNews as new News
oNews.GetData
----------
Från .aspx
Går inte då denna är friend och inte synlig för omvärlden
```

\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*
Private

```
Public Class News
Private sub GetNews()

End Sub
End Class

------------
Annan klass

Går inte då denna endast är synlig för samma klass
----------
Från .aspx
Går inte då denna är Private och endast synlig för den egna klassen
```

\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*
Protected

```
Public Class News
Protected sub GetNews()

End Sub
End Class

------------
Annan klass - ARV

Inherits News

GetNews()

Fungerar!!!!
----------

Annan klass INSTANS
Dim oNews as New News

oNEws.GetData

Fungerar EJ då sub endast är "synlig" via arv
---------------

Från .aspx
Går inte då denna endast är synlig via arv
```

\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*
Protected Friend

```
Public Class News
Protected Friend sub GetNews()

End Sub
End Class

------------
Annan klass - ARV

Inherits News

GetNews()

Fungerar!!!!
----------

Annan klass INSTANS
Dim oNews as New News

oNEws.GetData

Fungerar !!!!
---------------
Från .aspx
Går inte då denna endast är synlig via arv eller för det egna projektet.
```

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

## #4 — P, 2003-01-21T20:33Z

Tack för en underbar genomgång h0ger. Jag har dock problem med denna kodsnutt:
Ligger i en class med strCnnType definerat till public utanför.

```
Function RunNonQuery(SqlStatement As String)

            Select Case strCnnType

                Case "Mssql"

                    Dim cmdSqlCommand As New SqlCommand()

                Case "Mysql"

                    Dim cmdSqlCommand As New OdbcCommand()

                Case "Access"

                    Dim cmdSqlCommand As New OleDBCommand()

            End Select

            

            Try

                objCnn.Open()

                cmdSqlCommand = CreateCommand(SqlStatement)

                cmdSqlCommand.ExecuteNonQuery()

            Catch Exp As SqlException

                throw(Exp)

            Finally

                objCnn.Close()

            End Try

            

        End Function
```

Få  felmeddelande vid kompilering att cmdSqlCommand inte är deklarerad  :l Kan man inte deklarera på detta sätt?

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

## #5 — renholm, 2003-01-21T22:01Z

> **P skrev:**
>
> Tack för en underbar genomgång h0ger. Jag har dock problem med denna kodsnutt:
> Ligger i en class med strCnnType definerat till public utanför.
>
>
> ```
> Function RunNonQuery(SqlStatement As String)
> 
>             Select Case strCnnType
> 
>                 Case "Mssql"
> 
>                     Dim cmdSqlCommand As New SqlCommand()
> 
>                 Case "Mysql"
> 
>                     Dim cmdSqlCommand As New OdbcCommand()
> 
>                 Case "Access"
> 
>                     Dim cmdSqlCommand As New OleDBCommand()
> 
>             End Select
> 
>             
> 
>             Try
> 
>                 objCnn.Open()
> 
>                 cmdSqlCommand = CreateCommand(SqlStatement)
> 
>                 cmdSqlCommand.ExecuteNonQuery()
> 
>             Catch Exp As SqlException
> 
>                 throw(Exp)
> 
>             Finally
> 
>                 objCnn.Close()
> 
>             End Try
> 
>             
> 
>         End Function
> ```
>
> 
> 
> Få  felmeddelande vid kompilering att cmdSqlCommand inte är deklarerad  :l Kan man inte deklarera på detta sätt?

Testa att declerara den med en form av basclass, alla connection classer implanterar System.Data.IDbConnection. Testa att deklarera cmdSqlCommand som IDbConnection. Har för mig att man ska kunna göra om inte så på ett liknande sätt.

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

## #6 — h0lger, 2003-01-22T05:45Z

Vad som är nytt med VB.NET är att man kan ha statement-specifika variabler. Detta innebär att variabler som deklareras inom ett statement (t.ex. en select case) med Dim blir enbart tillgängliga för detta statement och dör sedan så fort det är avklarat.

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

## #7 — P, 2003-01-22T07:39Z

gäller samma sak i en if/else sats? Eller kan man använda någon annan form av variabel-deklaration för att få dem publika i "funktionen". Har för mig att detta har disskuterats tidigare men jag hittar inget...

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

## #8 — h0lger, 2003-01-22T08:02Z

Det gäller samma för if/else. 

Kan du inte göra en fuling och deklarera objSqlStatement som object på funktionsnivå och sedan tilldela den "rätt" objecttyp i select case?

Typ

```
dim cmdSqlCommand as Object

select case

case 1
      cmdSqlCommand = New SqlCommand
case 2
     cmdSqlCommand = New OdbcCommand
end select
```

Vet inte om detta funkar. 

Problemet är att du inte kan deklarera cmdSqlCommand som publik i funktionen då du har tre likadana deklarationer.

Vet inte om du kan skapa en cmdSqlCommand property som du sedan överlagrar med korrekt typ. Kan vara värt ett försök.

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

## #9 — PatrikB, 2003-01-22T08:02Z

jepp, variabeln måste deklareras utanför .

testa denna:

```
[b]Private cmdSqlComamnd As IDbCommand[/b]

Function RunNonQuery(SqlStatement As String)

            Select Case strCnnType

                Case "Mssql"

                    cmdSqlCommand = New SqlCommand()

                Case "Mysql"

                    cmdSqlCommand = New OdbcCommand()

                Case "Access"

                    cmdSqlCommand = New OleDBCommand()

		Case Else
			'## -- throw some errors --
            End Select

            

            Try

                objCnn.Open()

                cmdSqlCommand = CreateCommand(SqlStatement)

                cmdSqlCommand.ExecuteNonQuery()

            Catch Exp As SqlException

                throw(Exp)

            Finally

                objCnn.Close()

            End Try
```

som sagt, koden e otestad

cya,
PatrikB

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

## #10 — h0lger, 2003-01-22T08:07Z

PAtrikB kan du förklara vad IDbCommand är? 

Din lösningen är snyggare.

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

## #11 — PatrikB, 2003-01-22T08:11Z

Tack!

IdbCommand är ett Interface som är implementerat i alla Dbclasser såsom OleDbCommand, SqlCommand, OdbcCommand, MySqlCommand etc .....
Finns även interface för Connection, IDbConnection etc....

Kika i SDKn .... där förklaras det bättre ... ;)

cya,
PatrikB

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

## #12 — h0lger, 2003-01-22T08:15Z

Ah ok. Det är dags att RTFM för min del

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

## #13 — PatrikB, 2003-01-22T08:19Z

... tycker att det är det enda jag gör ... :e ... för minsta grej man vill åstadkomma ... men, förhoppningsvis lossnar det snart ;)

cya,
PatrikB

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

---

Tråden på webben: https://www.webforum.nu/amne/dotnet/65673-public-pirvate-dim-etc
