08. juni 2005 - 11:36Der er
7 kommentarer og 1 løsning
betydning af System.Drawing.Imaging.EncoderParameter
Jeg er i gang med at opbygge et konverterings / komprimerings modul til brug ved billedupload på internettet. Jeg har fundet et eksempel men jeg forstår det ikke helt. Hvad f..... er [nummmer]L eks. 100L for en type??? Jeg bruger den til at angive hvor hårdt billedet skal komprimeres.
eps.Param[0] = new System.Drawing.Imaging.EncoderParameter( System.Drawing.Imaging.Encoder.Quality, 50L );
hvis jeg i stedet skriver 50 (uden L) så fungere det ikke.. Og en int er så vidt jeg ved ikke noget problem at omskrive til en long, også uden at caste.
Nu er det vel næppe et mål i sig selv at man skal gennemtvinge at folk skriver det L bagefter eller ej?
Jeg har ikke undersøgt nærmere hvorfor det lige går galt med dit kode eksempel, men jeg kunne forestille mig at det havde noget at gøre med overloading af funktioner. Se f.eks. det nedenstående kodeeksempel, som resulterer i en fejl hvis L’et udelades:
using System;
namespace Eksperten { class Class1 { [STAThread] static void Main(string[] args) { Class2 C2 = new Class2(); int Resultat = C2.Metode(100L); } }
class Class2 { public void Metode(int Arg) { }
public int Metode(double Arg) { return 42; } } }
Grunden er at funktionen ”Metode” er overloadet; Når compileren skal bestemme sig til hvilken af de to versioner den skal bruge, så kigger den på argumenterne (den ser derimod overhovedet ikke på returtypen!). Derfor vil den forsøge at bruge den første version hvis man udelod L’et:
int Resultat = C2.Metode(100);
Dette skyldes at værdien 100 som default vil blive opfattet som en int. Da denne overload ikke returnere noget (void) så giver det automatisk en fejl når man forsøger at kompilere.
Hvis man derimod vil fortælle compileren at den skal bruge den anden overloadede version, så skal man fortælle den at de 100 altså er en double:
Eksperten.dk har nu heller ikke udsendt mails indtil for et par dage siden, så det er ikke så underligt at folk ikke aner at der er kommet indlæg på deres spørgsmål.
Og et svar :^)
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.