CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

[C#] Quelques questions :)

sirjulio
sirjulio
Niveau 12
26 novembre 2007 à 04:37:11

Pour etre plus precis, .Net a été créé pour justement fournir une abstraction de cette API (elle etait pas vraiment facile à utiliser). Donc sous Windows, le framework permet de manipuler l´API Win (pour le moment, il n´y a pas d´autres moyens de faire marcher un prog sous windows) mais sans t´en rendre, ni meme que tu le saches.

Pour revenir à Mono, ce qu´ils ont fait, c´est qu´ils ont repris la BCL (base class library, les classes les plus importantes) et ont adapté leur dll pour Linux. Donc pour Winforms, ils ont des classes (Form, Control, Application) a adapté pour le systeme Linux, ce qu´ils ont fait. L´enorme avantage dans tout ca, c´est que quelque soit la plateforme ou tu as compilé ton appli et celle ou elle s´executera (sous condition qu´il existe une machine virtuelle pour la plateforme), ce n´est pas ton probleme, tu sais que new Form() te donnera une reference vers une fenetre, et ce quelque soit l´API sous jacente (Win, l´API de Linux ou autres).

dnob700
dnob700
Niveau 10
26 novembre 2007 à 11:07:43

il y a d´autre api sous windows que win32 néanmoins. Ou en tout cas, il y a au moins interix, une API posix distribuée par microsoft dans SFU (et, comme je le disais l´autre jour, qui doit être inclue nativement dans certaine version de vista je crois).

Et il pourrait y en avoir d´autre, même si ce n´est pas le cas à ma connaissance.

godrik
godrik
Niveau 30
26 novembre 2007 à 11:28:56

pendant un temps, tu avais access au sous systeme OS/2. Mais je ne l´ai jamais testé directement.

sangohan55
sangohan55
Niveau 10
30 décembre 2007 à 22:52:40

Bonjour,

je up ce topic car j´ai de nouveau des questions sur C# .
Dans le bouquin que je viens d´acheter*, l´auteur dit que C# n´est pas comme C/C++ au niveau des pointeurs, en C#, on ne peut pas "dépasser", ou empiéter sur un endroit non réservé à son programme.

Je voudrais savoir si cela est un défaut ? on reproche ce même défaut à Java, pour sa lenteur. Si effectivement, le C# est aussi lent que Java, la vitesse est-elle négligeable pour un jeu vidéo 2D amateur ?

Et aussi je ne comprends pas pourquoi quand on déclare un objet, on est obligé de faire "exemple monExemple = new exemple()"

Dans mon bouquin on me dit que c´est une histoire d´instance et de référence d´objet ... le problème c´est que je n´arrive pas à cerner cette histoire .

Pour moi, on fait ça pour appeler le constructeur, c´est exacte ? mais si c´est ça, pourquoi ils font pas comme en C++, quand on crée l´objet, le constructeur est appelé par défaut ?

Merci bien ...

  • mon bouquin c´est celui-là :

http://www.amazon.fr/C-2-0-Guide-pratique-développeur/dp/2100493272/ref=pd_bbs_sr_3?ie=UTF8&s=books&qid=1199047782&sr=8-3

dnob700
dnob700
Niveau 10
30 décembre 2007 à 23:24:40

Dans du C# propre, les pointeurs n´existe pas. Donc pas de problème de savoir ce qu´on peut faire avec ou non. Ce n´est absolument pas un problème, on peut tout faire sans pointeur et le résultat est souvent plus propre, plus lisible, moins sujet aux erreurs, etc. Parfois (mais pas forcément) ça pourrait être moins rapide, on peut alors utilisé un mode "sale" en C# dans lequel les pointeurs sont autorisé, mais ce n´est pas recommandé. Et là, tu peut faire la même chose qu´en C++.

Il faut noter aussi que généralement le C# est bien plus efficace que le java car le C# est compilé "juste à temps" (i.e. le code qui s´exécute au final est bien du code natif), la où le java est interprété sur pas mal de plate forme (mais je crois sans en être sûr qu´il existe aussi des compilo JIT (Just in Time) pour java sur certaine plate forme).

Pour la déclaration d´objet, il faut comprendre ce que sont les variables en C# : il y en a de deux sorte. Les "value type" (je ne connais pas la traduction officielle) qui sont les int, bool et autre types de base. Ces variable sont créées normalement ("int var;") ou avec le mot clef "new" et sont toujours sur la pile (même si elles sont créée avec "new" je crois). Mais pour toutes les autres variables, on parle de "reference type", les valeurs sont stocké dans ce qui s´appelle le "tas managé". C´est un peu équivalent à la construction suivante en C++ :
A& a = new A();
Sauf que comme toutes les variables un peu "complexe" en C# sont des références, il n´y a pas besoin de noter le ´&´. Par contre, il faut quand même utiliser explicitement le mot clef "new" pour créer sur le tas la variable. Mais il n´est pas nécessaire d´utiliser de "delete" car le C# est un langage "garbage collecté" (à "ramasse miette" en français dans le texte) et il détruit les objets tout seul quand il le faut.

sangohan55
sangohan55
Niveau 10
30 décembre 2007 à 23:42:35

merci de ta réponse complète dnob700 :)

maintenant que tu en parles, j´avais oublié de parler du ramasse miette. Dans mon livre, le ramasse miette sert a libérer la mémoire non utilisé du programme, je voudrais savoir si il y a l´équivalent en C/C++ ?

merci

godrik
godrik
Niveau 30
31 décembre 2007 à 00:18:33

Il y a des bibliotheques qui font cela. Cependant, je ne crois pas qu´elle fonctionne bien comme il faut.
Tu peux aussi utiliser un mecanisme de ref counting pour liberer les ressources quand elle ne sont plus utilisé (a la maniere d´un auto ptr).

Cependant ces technique de libération automatique de la mémoire posent parfois problemes; particulierement lors de l´interconnection de plusieurs langages. En effet il n´est pas possible de savoir si du code ecrit dans un autre langage ne conserve pas de pointeur sur ta mémoire.

sangohan55
sangohan55
Niveau 10
31 décembre 2007 à 00:27:17

ok je vois .

Sinon une question un peu hors sujet mais bon ...

Est-il possible avec le debugger de reperer les fuites de mémoire ? car moi le debugger je ne m´en sert que pour reperer les dépassements de mémoire et donc je voulais savoir si il y avait cette option :)

et aussi, en C/C++, lorsqu´on ne libère pas une variable aloué dynamiquement, un int par exemple la "case" en mémoire de 4 octets est foutu ? ou alors elle est de nouveau opérationel au prochain redemarage de la machine ?

merci

dnob700
dnob700
Niveau 10
31 décembre 2007 à 00:35:32

"la "case" en mémoire de 4 octets est foutu ?"

t´inquiète, normalement tu ne peut faire aucun dommage physique à ta machine en programmant (fut un temps on pouvait facilement casser un disque dur par exemple, mais depuis ce n´est plus possible).

Toujours est-il que là, c´est encore mieux : dès que ton programme qui a une fuite de mémoire se ferme, le système libère toute sa mémoire et tu peut de nouveau l´utiliser.

Pour les fuites de mémoire ce n´est pas un débogueur qu´il faut utiliser mais d´autre sorte d´outils. Le plus connu est je crois valgrind, mais il y en a d´autre. Je ne peut pas trop t´en parler car je ne me suis jamais servi de ce genre de chose.

D´autre part, l´utilisation de langage à ramasse miette évite (entre autre chose) justement d´avoir à faire attention à ce genre de détail.

sangohan55
sangohan55
Niveau 10
24 janvier 2008 à 20:55:39

Je re-up ce topic car vous l'aurez deviner j'ai encore des questions :

j'ai fais une petite recherche sur google mais pas moyen d'avoir de réponse :

En C#, est-ce que le caractère de fin de chaîne existe '\0' comme en C/C++ ?

car quand je fais

char[] tabc = new char[] { 's', 'a', 'l', 'u', 't' };

ça marche parfaitement .

Aussi, en C# si j'ai bien compris, à chaque initialisations on instancie l'objet ( ici un char[] donc ), on l'instancie avec l'operateur new, ne faut-il pas libéré l'allocation a un moment donné ? comme en C/C++ avec delete ? ou alors ça c'est le boulot du Garbage Collector ? et il le fait bien ?

Aussi, avez vous un bon lien qui pourrait m'initier au entrée/sortie sur les fichiers en C# ?

merci d'avance :)

dnob700
dnob700
Niveau 10
25 janvier 2008 à 16:10:30

pour le problème de fin de chaîne je ne sais pas. Généralement on utilise des objet System.string pour gérer les chaînes de caractères et alors tu ne te préoccupe pas de ce genre de détails (car tu n'a pas accès à la représentation physique de la chaîne). C'est aussi l'avantage de ce genre de langage évolué ou il ne faut pas faire attention à plein de petite source d'erreur.

J'aurais donc tendance à dire qu'utiliser des tableaux de char pour faire des chaines de caractère est une erreur. Ensuite, il existe certainement des fonctions qui te construisent une chaîne à partir de ce tableau, mais comme de toute manière, la taille de tableau est connu par la bibliothèque, on peut penser que ces fonctions s'arrêtent à la fin du tableau (ou avant si elles croisent un '\0'). Mais je ne sais pas trop. Le mieux est de ne pas utiliser ça.

Pour le delete, c'est exactement ça. Tout les objets en C# héritent de la classe object un membre "finalize" que tu peut appeler et qui a pour effet de lancer l'équivalent du destructeur de la classe (mais ce n'est pas vraiment la même chose qu'en C++), par contre, ça ne libère pas la mémoire occupé par l'objet.
C'est le GC qui libère la mémoire automatiquement lorsque l'objet n'ai plus utilisé. Et il le fait très bien. Le GC du framework .NET est très très efficaces et très bien optimisé. C'est l'une des plus grandes forces de cette plateforme par rapport à mono (qui est catastrophique de ce point de vue) et même par rapport à java (qui n'est pas aussi bon).

Pour ce qui est des entrées/sorties, je ne peut rien te dire, je n'ai pas souvenir d'avoir fait ça en C# (il faut dire que mon utilisation du C# a été sur du code assez théorique et assez limité dans le temps) donc je ne sais même pas quelles fonctions il faut utiliser. Par contre, je suis sûr que c'est très bien fait et très simple dès qu'on a trouvé le bon truc.
[Bon en fait, je crois qu'il y a des classes Reader et Writter (ou File... ou un truc comme ça) qu'on ouvre avec un flux (un nom de fichier, un socket, etc.) et qui sont complètement génériques.]

dnob700
dnob700
Niveau 10
25 janvier 2008 à 16:11:53

j'ai oublié de préciser qu'il ne faut pas appeler la fonction finalize d'un objet sauf si on a de très bonnes raisons de le faire (par exemple pour fermer explicitement un descripteur de fichier à un moment précis). Normalement, c'est le GC qui s'en charge.

sangohan55
sangohan55
Niveau 10
25 janvier 2008 à 17:40:27

Merci beaucoup dnob700,

aussi quelqu'un a pendant un temps developpé avec le binding C# de la SDL ?

http://cs-sdl.sourceforge.net/index.php/Main_Page

car je cherche un "coach" comme ya 2/3 trucs que je pige pas trop ...

donc mon msn : malloc@live.fr

et sinon, vous connaissez un bon livre pour l'ensemble du C#, accesible pour un débutant qui programmai auparavant en C++ ?

merci d'avance :)

dnob700
dnob700
Niveau 10
27 janvier 2008 à 14:09:33

comme livre, je peut te conseiller "Visual C# xxx : The language" chez Microsoft Press (où xxx est la version du langage que tu utilise). Pour SDL je ne peut rien te dire : je n'aime pas ça en C et je n'ai jamais essayer en C#.

Engineer
Engineer
Niveau 12
28 janvier 2008 à 20:33:47

Bonjour à tous. J'ai quelques questions concernant le logiciel visual studio 2008 et concernant .net:

quel framework .net Visual Studio 2008 permet t'il d'adresser ?
2 dans VS2008, est ce que l'intellisense supporte le js ? (javascript)
3 est ce que la gestion des manifestes UAC est integrée dans vs2008

merci d'avance

sangohan55
sangohan55
Niveau 10
28 janvier 2008 à 20:39:27

hééé, tu squattes mon topic toi ! :(

1).NET 3.5
2) je crois pas
3) je crois que ce lien pourrait répondre à ta question

http://lgmorand.developpez.com/dotnet/developper-sous-vista/

dnob700
dnob700
Niveau 10
28 janvier 2008 à 22:21:48

pour le 1 tu peut utiliser le framework que tu veux pourvu que les fichiers de développement soient installés.
Pour le 2, je crois que oui, peut-être dans l'outils pour faire des sites web (i.e. je crois que c'est le cas dans VS2005, je ne pense pas qu'il l'ai enlevé dans le 2008, mais je ne l'ai pas testé).
Pour le 3, pas la moindre idée, je ne sais pas ce qu'est un manifeste UAC.

Engineer
Engineer
Niveau 12
29 janvier 2008 à 20:40:48

merci pour vos réponses :)

Engineer
Engineer
Niveau 12
29 janvier 2008 à 21:04:20

ah sangohan, il y a une espece de suites de tutorials sur msdn, tu recherrche coach c# et tu verras trois tutop en ligne, les autres en train de se completer. les trois premiers consistent à une application avec des winforms ressemblant à excel et à des améliorations de celle ci, et la doc de msdn pourraa t'aider si les réponses aux questions que tu as e sont pas dans les tuto.

sangohan55
sangohan55
Niveau 10
30 janvier 2008 à 07:25:14

Oui, j'ai découvert ça il y a 1 semaine !
Merci tout de même de ta réponse :)

Sous forums
  • Aide à l'achat Mac
  • Steam Deck
  • Création de sites web
  • Création de Jeux
  • Linux
  • Programmation
  • Internet
  • Macintosh
  • Hardware
La vidéo du moment