webForumDet fria alternativet

Sätta "properties" på objekt man skapar

.NET

9 svar · 291 visningar · startad av erka

Medlem sedan dec. 19996 522 inlägg
Frågan#1

Hej jag har kommit att tänka på en sak som någon kanske kan förklara lite mer

Ibland när man skapar ett objekt av något slag, tex från en komponent i klassisk asp kan man sätta "properties" på dessa. Text om jag har en komponent som gör småbilder kan jag kanske först skapa objektet och sedan skriva

objektnamn.JPEGquality = 94
objektnamn.ThumbnailFrame = "/Images/Frames/MyThumbNailFrame"
objektnamn.CreateThumbNail

Idag när jag bygger en klass har jag en massa funktioner och subbar i dessa, en funktion tar ju tex emot saker och ting som jag skickar in, men hur tänker man / skriver man om man vill ha möjlighet att göra som jag beskrev ovan. Hoppas någon hajjar min snurriga beskrivning av vad jag funderar på, kunde inte komma på något bättre sätt att förklara det på

Tacksam.

Medlem sedan aug. 20003 575 inlägg
#2
Class objektnamn
{
public static int JPEGquality
}

static void funktion()
{
objektnamn.JPEGquality = 94
}

int intBlaha = objektnamn.JPEGquality;

eller behandla det direkt som en int.
Sedan är det bara att hämta det i andra funktioner

Var det detta du var ute efter ?

Medlem sedan dec. 19996 522 inlägg
#3

Tack..Hajjar bara inte riktigt hur man ska använda det, låt oss säga att jag har en klass med 3 funktioner, 2 små funktioner som gör följande

-sätter jpeg kvaliteten på thumbnailen som ska skapas
-kollar om det ska göras en ståeende eller liggande thumbnail

och den stora som skapar själva thumbnailbilden, i denna funktionen anropar jag funktionen som koller om det ska vara en liggande eller ståeende, denna funktion tar även ett argument som säger vilken JPEG kvalitet det skall vara ?

Om jag då direkt skapar objektet och kör på skapathumbnailbilden så kan jag ju skicka med parametern som talar om att det ska vara en viss JPEGkvalitet.

Vad jag vill kunna göra är att i min codebehind sida
Först skapa en instans av klassen, skapa ett objekt här ?

Tex
-Skapa objektet, hur gör man det korrekt
-objektnamn.JPEGquality=75
-Skapa thumbnailbilden

Vad jag inte riktigt hajjar är hur det ska ske i praktiken, vilket objekt är det jag ska skapa först, är det bara en instans av klassen där funktionerna ligger i ?

Medlem sedan maj 20018 027 inlägg
#4

Re: Sätta "properties" på objekt man skapar

erka skrev:

Ibland när man skapar ett objekt av något slag, tex från en komponent i klassisk asp kan man sätta "properties" på dessa. Text om jag har en komponent som gör småbilder kan jag kanske först skapa objektet och sedan skriva

objektnamn.JPEGquality = 94
objektnamn.ThumbnailFrame = "/Images/Frames/MyThumbNailFrame"
objektnamn.CreateThumbNail

Idag när jag bygger en klass har jag en massa funktioner och subbar i dessa, en funktion tar ju tex emot saker och ting som jag skickar in, men hur tänker man / skriver man om man vill ha möjlighet att göra som jag beskrev ovan.

Jag tror jag anar hur du vill göra med properties. Du vill, likt i VB, faktiskt kunna sätta och få variablerna via "property"-funktioner. I C# skulle det kunna se ut på följande vis:

public int JPEGquality
{
    get
    {
        return m_pJPEGquality;
    }
    set
    {
        m_pJPEGquality = value;
    }
}

Då kan du deklarera "m_pJPEGquality" som privat. Du kan även i "set"- och "get"-blocken definiera något som ska göras innan propertyn sätts eller returneras.

* jag reserverar mig för att jag inte har hållit på med C#, men så borde det vara om jag har förstått saken rätt ;) *

Medlem sedan dec. 19996 522 inlägg
#5

UlfT, tack jag kodar sidorna i VB, så du får gärna förklara exakt hur det ser ut i VB.

Jag undrar hur man ska skriva sin klass (samt i codebehind sidan, hur man skapar objektet korrekt) om man har de 3 ovan beskrivna funktionerna. Man vill från sin codebehind sida kunna göra så här.

1.-Skapa objektet
2.-Sätta objektets JPEG kvalitet till en viss siffra
3.-Skapa thumbnailen (skickar in en sökväg till funktionen), nu ska den skapade thumbnailen ha jpeg kvalitet efter vad jag satt i steg 2.

Tacksam för att någon hjälpen en som försöker greppa OOP någorlunda :)

Medlem sedan maj 20018 027 inlägg
#6

VB.Net:

Property JPEGquality() As Integer

    Get
        Return m_pJPEGquality
    End Get

    Set (ByVal Value As Integer)
        m_pJPEGquality = Value
    End Set

End Property
Medlem sedan dec. 19996 522 inlägg
#7

Tack, ska laborera med det ikväll. Undet tiden kanske du kan förklara exakt vad en property är och hur man kan använda den, vad den gör, jag hajjar inte helt 100%, är som sagt en färsking :)

Medlem sedan dec. 20003 887 inlägg
#8

Property är en metod som du kan använda för att komma åt en klass medlemsvaribler utan att behöva göra det via en klassfunktion, som returnerar en medlemsvariabel.

Vad den gör... den gör inget. Den innehåller information om klassen / objektet, som du kan tycka vara viktig.

[1][C#][/1]
Class cKlass
{
  private integer m_intHepp;
  private string m_strHepp;

  public integer intHepp
  {
    get { return this.m_intHepp; }
    set { this.m_intHepp = value; }
  }

  public string strHepp
  {
    get { return this.m_strHepp; }
    set { this.m_strHepp = value; }
  }

  public void fPrintProperty()
  {
    Console.Write m_intHepp;
    Console.Write m_strHepp;
  }
}

cKlass minKlass = new cKlass();

minKlass.intHepp = 1234;
minKlass.strHepp = "Hello World";

Console.Write minKlass.intHepp;
Console.Write minKlass.strHepp;

minKlass.fPrintProperty();

[1][VB][/1]
Class cKlass
{
  Private m_intHepp As Integer
  Private m_strHepp As String

  Property intHepp As Integer
    Get
      Return m_intHepp
    End Get
    Set
      m_intHepp = Value
    End Set
  End Property

  Property strHepp As String
    Get
      Return m_strHepp
    End Get
    Set
      m_strHepp = Value
    End Set
  End Property

  Public Sub fPrintProperty
    Console.Write m_intHepp
    Console.Write m_strHepp
  End Sub
}

Dim minKlass As new cKlass()

minKlass.intHepp = 1234
minKlass.strHepp = "Hello World"

Console.Write minKlass.intHepp
Console.Write minKlass.strHepp

minKlass.fPrintProperty()

Ingen aning ifall någon av ovanstående fungerar som jag tänkte, men det bör ge dig en fingervisning om hur det ska fungera ;)

Medlem sedan maj 2001329 inlägg
#9

Gör ett försök att förklara properties :stud

I normala fall gör man i sin klass en enkel variabel.

tex

public string minSträng;

Denna sträng kan man komma åt och sätta överallt ifrån. Dock uppstår vissa problem med detta. Du kan tex inte enbart tillåta att man läser ifrån variablen och du kan ej heller kontrollera att man skrev in vissa värden, eller göra andra kommandon. För detta kan man då använda funktioner.

tex

private string minSträng;
public void set_minSträng(string value){
  minSträng = value;
}
public string get_minSträng(){
  return minSträng;
}

Med övre exempel ser man ju att man förlora den smidighetesom variabler ger när man kan skriva minKlass.minSträng = "sture" istället för minKlass.set_minSträng("sture"). Det fösta föredrar jag helt klart speciellt när jag måste hålla reda på att för att få ut värdet måste jag använda ännu en funktion.

Så lösningen på detta har då varit att skapa properties.

tex

private str;
public string String{
  get{
    if(str == null){
      throw new ApplicationException("String value not set");
    }
    return str;
  }
  set{
    if(value == null || value.Trim()==""){
      throw new ApplicationException("Cannot set String to empty string);
    }
    if(value.Trim() == "Kalle"){
      value = "Karl";
    }
    str = value.Trim();
    }
}

I övre exmplet kan man både läsa och skriva till String. Plus att vi ser att det händer massa lustiga saker när man gör det. Tex ändras Kalle till Karl.

För bättre förklaring se dokumentationen:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpgenref/html/cpconpropertyusageguidelines.asp

Medlem sedan dec. 19996 522 inlägg
#10

Tack för alla svar. Om någon orkar kolla i filen jag bifogar kanske den personen kan förklara följande, för jag lyckas inte riktigt. Försöker förstå hur man ska lösa OO rent praktiskt på ett bra sätt.

Det är 2 klasser

FileFunctions
-Tar bara med en funktion just nu som heter UploadImageResize, den laddar upp en bild och anropar sedan funktioner i den andra klassen för att skapa en thumbnail.

ImageFunctions
-Klass med diverse funktioner för bildhantering

När jag idag från mina aspx sidor ska ladda upp en bild och skapa en thumbnail av den så går det till på följande sätt

Dim objFileFunctions As FileFunctions = New FileFunctions
objFileFunctions.UploadImageResize(FolderPath,MyFile,"Images","80.jpg")

Ovan skickar jag med följande saker

FolderPath = Path dit thumbnailen som skapas ska sparas på servern
MyFile = Den postade filen ifrån formuläret
”Images” = Katalognamnet där Thumbnailramen ligger
”80.jpg” = Nya filnamnet som bilden ska sparas ner till

Nu till min första fråga:
I klassen FileFunctions har jag en funktion som laddar upp bilden samt anropar funktioner i ImageFunctions för att skapa en thumbnail. Jag antar att detta inte är rätt tänk utan att man istället ska ha mer generella funktioner och sedan från aspx sidorna (eller codebehind) göra ungefär
-Anropa en funktion för att ladda upp bilden
-Anropa en funktion för att skapa en thumbnail av den nyss uppladdade bilden

Stämmer detta ? Jag kanske istället ska flytta ut UploadImageResize till ett namespace som heter tex MyUploadFunctions och däri anropa en generell funktion för Upload som jag lägger i FileFunctions klassen (Namespace MyFileFunctions). Sedan anropar jag funktionen för att skapa thumbnails i klassen ImageFunctions (Namespace MyImageFunctions)

Andra frågan:
Detta känns ju absolut inte skalbart och rätt omständigt, utan vad jag skulle vilja lära mig och förstå det är hur jag skriver så att jag kan göra följande, jag lyckas inte skriva propertys själv utan behöver mer ”praktiskt hjälp”. Nu utgår jag ifrån att jag har det på samma sätt som jag har i min bifogade fil.

-Skapa en instans av UploadImageResize
-Sätta JPEG kvaliteten till 80
-Sätta så att Katalogen på thumbnailramen är ”Images”
-Sätta så att folderpath blir =”Images/Upload/”
-Sätta så att filnamnet på thumbnailen blir ”80.jpg”
-Sätta så att jag laddar upp bilden från upload ”MyFile”
-Skapa thumbnailen och spara den på disk med propertys som jag beskrev ovan.

Ifrån aspx sidan blir det typ

Set objFileFunctions = New FileFunctions.UploadImageResize (?)
objFileFunctions.JPEGQuality = 80
objFileFunctions.ThumbNailFramePath = “Images”
objFileFunctions.SaveFolderPath = “Images/Upload/”
objFileFunctions.NewFileName = “80.jpg”
objFileFunctions.SourceFile = MyFile
objFileFunctions.Save

Mycket tacksam för all hjälp jag kan få, jag är hyffsat förvirrad just nu. Jag kan ju ha missförstått allting och är helt ute och snurrar, men jag vill lära mig iaf :)

266 ms totalt · 4 externa anrop · v20260731065814-full.6fe65c25
124 ms — deklarationer (db)
0 ms — hämta statistik (cache)
135 ms — hämta tråd, inlägg och bilagor (db)
129 ms — ändringar (db)