Fetstil Fetstil Kursiv Understrykning linje färgläggning tabellverk Punktlista Nummerlista Vänster Centrerat högerställt Utfyllt Länk Bild htmlmode
  • Forum & Blog
    • Forum - översikt
      • .Net
        • asp.net generellt
        • c#
        • vb.net
        • f#
        • silverlight
        • microsoft surface
        • visual studio .net
      • databaser
        • sql-server
        • databaser
        • access
        • mysql
      • mjukvara klient
        • datorer och komponenter
        • nätverk, lan/wan
        • operativsystem
        • programvaror
        • säkerhet, inställningar
        • windows server
        • allmänt
        • crystal reports
        • exchange/outlook
        • microsoft office
      • mjukvara server
        • active directory
        • biztalk
        • exchange
        • linux
        • sharepoint
        • webbservers
        • sql server
      • appar (win/mobil)
      • programspråk
        • c++
        • delphi
        • java
        • quick basic
        • visual basic
      • scripting
        • asp 3.0
        • flash actionscript
        • html css
        • javascript
        • php
        • regular expresssion
        • xml
      • spel och grafik
        • DirectX
        • Spel och grafik
      • ledning
        • Arkitektur
        • Systemutveckling
        • krav och test
        • projektledning
        • ledningsfrågor
      • vb-sektioner
        • activeX
        • windows api
        • elektronik
        • internet
        • komponenter
        • nätverk
        • operativsystem
      • övriga forum
        • arbete karriär
        • erbjuda uppdrag och tjänster
        • juridiska frågor
        • köp och sälj
        • matematik och fysik
        • intern information
        • skrivklåda
        • webb-operatörer
    • Posta inlägg i forumet
    • Chatta med andra
  • Konto
    • Medlemssida
    • Byta lösenord
    • Bli bonsumedlem
    • iMail
  • Material
    • Tips & tricks
    • Artiklar
    • Programarkiv
  • JOBB
  • Student
    • Studentlicenser
  • KONTAKT
    • Om pellesoft
    • Grundare
    • Kontakta oss
    • Annonsering
    • Partners
    • Felanmälan
  • Logga in

Hem / Forum översikt / inlägg

Posta nytt inlägg


Använda sig av Class

Postades av 2004-01-08 13:21:23 - Benni Svensson, i forum c# (c-sharp), Tråden har 19 Kommentarer och lästs av 930 personer

Jag snurrar nog ihop för mycket och blandar ihop med VB.
I VB brukade jag sammla ihop functioner i en särskilld modul. Skulle vilja göra likadant i C#.

Försöker så här:
Det finns en textruta och en knapp i form1
<code>
//under knappen i form1
string texten = textBox1.Text;
string svar = Funktioner.Class1.kollaStor(texten);

//i class1 (namespase Funktioner) ligger kollaStor

public string kollaStor(string texten)

{

if(texten.Length > 0)
{
texten.ToUpper;
return;
}
}
</code>
Felet är att jag inte får "tag i classen.
Om jag skriver ( i Form1) Funktioner lägger till en punkt så hittar han Class1.
Lägger jag till en punkt så hittar han Equals och ReferenceEquals men inte min class.
Hur bör jag skriva för att kunna ha ett bibliotek utanför de vanliga formerna(form1 osv)


Svara

Sv: Använda sig av Class

Postades av 2004-01-08 13:36:05 - Fredrik Normén

Du kan använda dig av "static" för att slippa initiera klassen vilket du annars måste göra för att få tag i din metod:

Ändra:

public string kollaStor(string texten)

till:

public static string kollaStor(string texten)

/Fredrik Normén NSQUARED2


Svara

Sv: Använda sig av Class

Postades av 2004-01-08 14:21:24 - Benni Svensson

Tack, nu fick jag tag på den, men jag gör tydligen något fel i alla fall, jag får ett error.
Så här ser det ut nu.
<code>
private void button1_Click(object sender, System.EventArgs e)

{

string texten = textBox1.Text;

string svar = Funktioner.Class1.kollaStor(texten);

textBox1.Text = svar;

}

//class1

public static string kollaStor(string texten)

{

if(texten.Length > 0)

{

texten.ToUpper();

return texten.ToString();

}

}
</code>
Error:
E:\MeraTest\Test\Class1.cs(21): 'Funktioner.Class1.kollaStor(string)': not all code paths return a value

Vad jag försöker att göra är att när jag klicka på knappen, så skall texten bli i versaler.
Just denna app har ingen betydelse, men jag ville lära mig hur jag kan skicka info ifrån en classfil till en annan class.


Svara

Sv: Använda sig av Class

Postades av 2004-01-08 14:30:26 - Fredrik Normén

Din metod måste returnera ett värde. Den gör det nu enbart om den kommer in i If statsen, om "texten" längd är 0 så kommer den inte in i if statsten, det är bara void som inte använder sig av return alla andra metoder måste returnera något.

<code>
public static string kollaStor(string texten)
{
if(texten != null && texten.Length > 0)
{
return texten.ToUpper();
}

return string.Empty;
}
</code>

/Fredrik Normén NSQUARED2


Svara

Sv: Använda sig av Class

Postades av 2004-01-08 15:03:13 - Per Hultqvist

Som ett komplement till Fredriks svar så ligger det ett tips som handlar om detta här : [Har C# någon motsvarighet till VB:s moduler?]


Svara

Sv: Använda sig av Class

Postades av 2004-01-08 15:11:26 - Benni Svensson

Tack, den biten är helt ok nu.
Nu till verkligheten.
Vad jag skulle vilja göra är att ha min dataconnection i en classfil. Jag försöker med min tidigare övning i minnet.

I classfilen:
<code>
using System;
using System.Data;
using System.Data.OleDb;

//lite kod
public OleDbConnection con;

public OleDbDataAdapter da;

public DataSet ds;
public Class1()

{

//

// TODO: Add constructor logic here

//

konnekta();

}
//lite kod
public static object konnekta()

{

string CONstring = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=Försäljning.mdb";

con = new OleDbConnection(CONstring);

}
</code>
Det ger mig följande error:
E:\MeraTest\Test\Class1.cs(37): An object reference is required for the nonstatic field, method, or property 'Funktioner.Class1.con'

Jag antar att jag inte kan ha static i den classen?


Svara

Sv: Använda sig av Class

Postades av 2004-01-08 16:01:45 - Johan Bovin

Jag tror du skall ta en titt här t.ex.:
http://www.developerfusion.com/show/3821/5/
Problemet är att en statisk metod är separerad från själva instansen av klassen. Alltså så känner den inte till variabler som definerade i en instans av klassen. Kolla på länken ovan så kanske det klarnar lite. Om du inte skall göra sååå avancerade saker vid uppkopplingen kanske det räcker med att spara din connectionstring som en statisk variabel. Då behöver du ju bara ändra på ett ställe.


Svara

Sv: Använda sig av Class

Postades av 2004-01-08 16:47:37 - Benni Svensson

Hej Johan.
Nja jag är inte säker på att jag förstod artiklen, men så här är det just nu.
I classen:
<code>
using System.Data;
using System.Data.OleDb;
public OleDbConnection con;

public OleDbDataAdapter da;

public DataSet ds;

public Class1()
public static object konnekta()

{

string CONstring = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=Försäljning.mdb";

OleDbConnection con = new OleDbConnection(CONstring);

return con;

}
//i formen

public OleDbConnection con;
public OleDbDataAdapter da;
public DataSet ds;
//han kräver dessa deklarationern igen.
listBox1.Items.Clear();
string SQLstring ="SELECT * FROM Kunder";
da = new OleDbDataAdapter(SQLstring,con);
ds = new DataSet("frånKunder");
</code>
Det är naturligtvis mera kod, men jag tar bara med detta.
Jag får ett error:
Objectreferensen har inte angetts till en instans av ett object.

Jag tror att jag är helt åt skogen, jag skall väll inte behöva deklarera t ex con på mer än ett ställe?


Svara

Sv: Använda sig av Class

Postades av 2004-01-08 17:01:43 - Johan Bovin

Jag hade nog gjort nåt sånt här i så fall... kanske inte den snyggaste lösningen..

<code>
public class Myconnection()
{
public static OleDbConnection CONNECTION=null;
public static OleDbDataAdapter DATAADAPTER=null;
public static DataSet DATASET=null;

public static void Konnekta()
{

string CONstring = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=Försäljning.mdb";

CONNECTION = new OleDbConnection(CONstring);

}
}
//i formen

listBox1.Items.Clear();
string SQLstring ="SELECT * FROM Kunder";
Myconnection.Konnekta(); //för att sätta Myconnection.CONNECTION
Myconnection.DATAADAPTER = new OleDbDataAdapter(SQLstring,Myconnection.CONNECTION);
Myconnection.DATASET = new DataSet("frånKunder");
</code>


Svara

Sv: Använda sig av Class

Postades av 2004-01-08 17:51:09 - Per Hultqvist

Precis detta står i mitt tips ovan ([Har C# någon motsvarighet till VB:s moduler?]):
"Du kan t o m blanda statiska metoder och instansmetoder (dvs vanliga metoder som kräver en instans för att anropas) men kom ihåg att statiska metoder inte kan accessa data eller metoder som inte är deklarerade som static. "

Alla variabler som används i en static-metod måste vara deklarerade som static själva.


Svara

Sv: Använda sig av Class

Postades av 2004-01-08 19:33:28 - Niklas Jansson

Måste bara säga att angreppssättet är jävligt dumt. Se inte tekniska detaljer!

Antingen kör man objektorienterat, eller så gör man det inte. Att vilja peta in allt i en klass för att samla ihop det är definitivt inte korrekt enligt gängse objektorienteringsregler.

Tänk inte på om man kan komma åt icke-statiska variabler i en statisk metod.
Tänk istället så här:
Man har en typ av objekt, och alla sådan objekt har dels egna egenskaper och dels egenskaper som delas av alla objekten samtidigt. Det finns också något slags metod som man kan anropa som är generell för alla objekten. Ska denna metod kunna komma åt egenskaper hos enskilda objekt?

Nej - och man skulle aldrig komma på tanken att de skulle göra det heller!

Det är därför problem uppstår när man använder icke objektorienterade idéer med objektorienterade konstruktioner.

Jag är inte insatt i C# tillräckligt, är det som Java där allt måste vara del av klasser?
I så fall ska ju en funktionsorienterad "hopbuntning" ske i en dummy-klass med bara statiska metoder och variabler.

Är det inte så, så skall man lägga alla i ett namespace (_det_ finns väl i C#?).

Men allra bäst är naturligtvis att göra en ren OOD istället; på det sättet som Arathorn föreslår.


PS.
Det här känner säkert redan alla till, och ni undrar varför jag skriver det här i så fall. Det är för att jag borde läsa på till en omtenta, men jag orkar inte... =)


Svara

Sv: Använda sig av Class

Postades av 2004-01-08 22:32:43 - Per Hultqvist

Håller med om vad du säger Niklas, men mitt tips handlar inte om OOP/OOD, det handlar om vad C# klarar och inte klarar. I C# KAN du blanda statiska funktioner och instansfunktioner i en och samma klass. Om det är bra eller ej har jag inga synpunkter på i mitt tips, det är en annan diskussion...Och Namespaces finns i C#.


Svara

Sv: Använda sig av Class

Postades av 2004-01-08 23:53:05 - Jörgen Lindroos

Håller också med dig Niklas. Varför inte programmera i VB.NET om man vill köra vanligt(?) funktionsbaserad programmering (ursäkta, kommer inte ihåg vad motsatsen till OOP heter).

Det som är så bra med OOP, är att det blir mycket enklare att strukturera sin kod. Det går säkert att göra lika snabb kod utan OOP, men tro mig - det är mycket svårare. En god förståelse av OOP och vitsen med det krävs för alla som vill lära sig det.

Men det är klart, alla har vi ju våra ströfunktioner som vi lägger nånstans. Jag brukar för det mesta göra en klass som heter Util, och lägga alla generella funktioner där. Men det blir uppenbart att man inte blandar statiska och icke-statiska funktioner och variabler då.

/Jörgen


Svara

Sv: Använda sig av Class

Postades av 2004-01-09 10:01:55 - Niklas Jansson

Nu när jag ändå har gett mig in i det här, så kan jag väl lika gärna fortsätta... =)

<b>>Håller med om vad du säger Niklas, men mitt tips handlar inte om OOP/OOD, det handlar om vad C# klarar och inte klarar.</b>
Är med på det, det var en uppmaning till saw att tänka på ett annat sätt.

<b>>I C# KAN du blanda statiska funktioner och instansfunktioner i en och samma klass. Om det är bra eller ej har jag inga synpunkter på i mitt tips, det är en annan diskussion...</b>
Jag säger inte att det är dåligt att blanda dem, men det är viktigt att inse vad de olika konstruktionerna betyder. En statisk funktion eller medlemsvariabel betyder "en generell egenskap eller handling för alla objekt av en typ". Såvida de har allmän åtkomst.

Det är ju inget fel i att det finns en egenskap som är generell hos alla objekt av en typ, samtidigt som varje typ har egna egenskaper. Men att använda statiska variabler för att så att säga, "spara undan information", eller så, är ju helt vansinnigt, precis som att funktioner som är generella för hela klassen (statiska) naturligtvis inte kan komma åt specifika detaljer (instansvariabler) i enskilda objekt.

Privata grejer bör ju hålla ungefär lika hård koll, men där kan man även lägga implementationsdetaljer.

<b>>Och Namespaces finns i C#. </b>
Bra, följer man då ett funktionsorienterat synsätt så ska man inte lägga "lösa" funktioner i klasser, utan i Namespaces.

<b>>funktionsbaserad programmering (ursäkta, kommer inte ihåg vad motsatsen till OOP heter).</b>
Funktionsorienterad, som sagt (fast motsats vet jag inte om det är, snarare en lägre abstraktionsnivå). Eller strukturerad. (Eller spaghetti. =))


Sen så är det faktiskt ofta så att koden blir effektivare om man kör med OO - brukar ta strängar i C++ som exempel. En vanlig enkel sträng (en array med tecken) är ganska effektiv, men en mer abstrakt sträng blir effektivare eftersom man t.ex. kan implementera en smartare metod för stränglängder, och det är lätt att göra ref-counting - något som kan höja prestandan avsevärt, men som är svårt och mycket felbenäget att göra utan en högre abstraktionsnivå.


Svara

Sv: Använda sig av Class

Postades av 2004-01-09 11:33:54 - Benni Svensson

Tack alla ni som har svarat, och velat hjälpa mig att få rätt riktning på min kodning.
Jag inser nog(tyvärr) att jag inte skall försöka ha en connection liggande i en classfil, det är nog ingen vinst med det hela.

När jag tänkte "som jag brukar" så handlade det väldigt mycket om att inte upprepa kod, dvs försöka att göra functioner t ex som underlättar. Detta tankesättet är tydligen helt eller delvist förkastligt så jag får försöka att tänka på ett annat sätt.

En god fortsätning på det nya året.


Svara

Sv: Använda sig av Class

Postades av 2004-01-09 11:50:41 - Niklas Jansson

<b>>När jag tänkte "som jag brukar" så handlade det väldigt mycket om att inte upprepa kod, dvs försöka att göra functioner t ex som underlättar. Detta tankesättet är tydligen helt eller delvist förkastligt så jag får försöka att tänka på ett annat sätt.</b>
Nej, missförstå oss inte!

Det är inget fel rent principiellt att dels programmera funktionsorienterat, och dels bunta ihop funktioner i grupper. Dock är det så att du bör lägga funktionerna tillsammans i en namespace, och inte en class. De har samma förutsättningar för det du vill uppnå, men namespacet förvirrar inte på samma sätt.


Det är däremot ett gott råd att försöka göra det objektorienterat ändå; men då får du byta sätt att tänka. En kort fingervisning:
Det är inte frågan om "på vilket sätt gör jag si och så?", utan snarare: "vad består mitt program av?".

Din Connection är ett objekt (du ska naturligtvis se allt i ett sammanhang) - du ska se den som ett objekt.
Vilka egenskaper har en Connection?
Nu har jag ingen större koll på databaser, men en egenskap är väl protokollet, en annan en adress dit det skall anslutas osv.

Vad kan den göra?
Ansluta, ge ifrån sig recordsets (?) osv.
Då har du sådana metoder.
I Anslutningen skapar du din "ConnectionString", för det är först då du behöver den.

Typ:
Connection EnAnslutning;
EnAnslutning.Address="localhost";
//...
EnAnslutning.Connect();


Ser det inte lite enklare ut?


Svara

Sv: Använda sig av Class

Postades av 2004-01-09 13:14:34 - Benni Svensson

Nu svarar du ju faktiskt på min uppföljningsfråga, och det var ungefär så jag hade tänkt i mitt förvirrade tillstånd.
Namespace är Funktioner.
Där hadde jag lagt först
<code>
public OleDbConnection con;
public OleDbDataAdapter da;
public DataSet ds;
</code>
(är osäker på om detta inte skulle vara private)
Därefter så tänkte jag på en class (måste det ju vara) men jag fick ju problem här, och en del tyckte att jag kanske tänkte fel.

När jag nu grunnar lite till, så kanske jag jagar mindre kod på fel sätt. Det är ju trots allt bara två rader kod på varje sida, men jag funderade i stort att få lite mera överblick och det trodde jag att jag skulle vinna genom att hela tiden peka på samma class.

Jag får nog ta mig en ordentlig tankeställare var jag skall lägga enigin på att spara och optimera.

Tack för att ni tar er tid.


Svara

Sv: Använda sig av Class

Postades av 2004-01-09 13:45:40 - Jörgen Lindroos

Datatillgången ligger oftast som en klass. Brukar ha en klass som heter typ DataAccess som innehåller både connection och connectionsträngen + en del andra hjälpsamma metoder.

Men jag förstår inte riktigt. Funktioner kan väl inte läggas direkt i ett namespace. Det är ju som i Java att allt är i klasser och det finns inget utanför.

/Jörgen


Svara

Sv: Använda sig av Class

Postades av 2004-01-09 14:23:53 - Niklas Jansson

Ahaaaa...

Gillar inte det upplägget alls, men då är det klart att man får skaffa en klass som bara har massa statiska metoder och variabler.

Kodar ju inte i C# alls själv, så...


Svara

Sv: Använda sig av Class

Postades av 2004-01-09 16:47:38 - Jörgen Lindroos

>Gillar inte det upplägget alls, men då är det klart att man får skaffa en klass som
>bara har massa statiska metoder och variabler.

Annars är det väl inte fullt ut OOP?

/Jörgen


Svara

Nyligen

  • 09:09 Vill du köpa medicinska tester?
  • 12:47 Vem beviljar assistansen – kommune
  • 14:17 Någon med erfarenhet av hemstädnin
  • 14:14 Bör man använda sig av en båtförme
  • 14:12 Finns det någon intressant hundblo
  • 14:25 Tips på verktyg för att skapa QR-k
  • 14:23 Tips på verktyg för att skapa QR-k
  • 20:52 Fungerer innskuddsbonuser egentlig

Sidor

  • Hem
  • Bli bonusmedlem
  • Läs artiklar
  • Chatta med andra
  • Sök och erbjud jobb
  • Kontakta oss
  • Studentlicenser
  • Skriv en artikel

Statistik

Antal besökare:
Antal medlemmar:
Antal inlägg:
Online:
På chatten:
4 569 155
27 952
271 704
6 040
0

Kontakta oss

Frågor runt konsultation, rådgivning, uppdrag, rekrytering, annonsering och övriga ärenden. Ring: 0730-88 22 24 | pelle@pellesoft.se

© 1986-2013 PelleSoft AB. Last Build 4.1.7169.18070 (2019-08-18 10:02:21) 4.0.30319.42000
  • Om
  • Kontakta
  • Regler
  • Cookies