Haros Δημοσ. 4 Νοεμβρίου 2009 Δημοσ. 4 Νοεμβρίου 2009 Με ποιόν τρόπο στην c# μπορεί να δηλωθεί ένα αντικείμενο που δημιουργείτε μέσα σε μια function global ώστε να μπορεί να το χρησιμοποιήσει μια άλλη function; π.χ να δημιουργηθεί σε μια function το αντικείμενο foo, και μετά σε μια άλλη function να γίνει χρήση της foo.faa(); Ευχαριστώ.
warchief Δημοσ. 4 Νοεμβρίου 2009 Δημοσ. 4 Νοεμβρίου 2009 Για ποιο λογο η δευτερη function η οποια χρειαζεται το object να μην το παίρνει σαν argument ? > void doSomethingWithBar(ref Bar bar) { // Do something with bar }
Pantelwolf Δημοσ. 4 Νοεμβρίου 2009 Δημοσ. 4 Νοεμβρίου 2009 Για ποιο λογο η δευτερη function η οποια χρειαζεται το object να μην το παίρνει σαν argument ? Γιατί θέλει να κρατιέται η μεταβλητή και όταν βγεί εκτος της συνάρτησης. Δεν υπάρχουν Global μεταβλητές στη C# υπάρχουν όμως μεταβλητές κλάσης με access specifiers Εδιτ Ρίξε μια ματιά εδώ
Evgenios1 Δημοσ. 4 Νοεμβρίου 2009 Δημοσ. 4 Νοεμβρίου 2009 κατι τετοιο? >using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Reflection; namespace cs22 { class Program { static void Main(string[] args) { var obj = new { age = 209, name = "Mitsotakis" }; useObj(obj); Console.Read(); } static void useObj(object obj) { var t = obj.GetType(); var ps = t.GetProperties(); foreach (var p in ps) { Console.WriteLine(p.Name+" = "+p.GetValue(obj,null)); } } } } Φτιαχνω ενα χ object σε μια συναρτηση και το χρησιμοποιω σε μι αλλη.
Haros Δημοσ. 4 Νοεμβρίου 2009 Μέλος Δημοσ. 4 Νοεμβρίου 2009 Για ποιο λογο η δευτερη function η οποια χρειαζεται το object να μην το παίρνει σαν argument ? > void doSomethingWithBar(ref Bar bar) { // Do something with bar } Απ'οσο ξέρω για να κάνω reference μια μεταβλητή σε μια function πρέπει πρώτα να καλέσω την function για να της το περάσω ( func(ref val) ). Δεν θέλω όμως κάτι τέτοιο. Θέλω απλά όποτε την καλώ να μπορεί να χρησιμοποιήσει το αντικείμενο. Επίσης ok άμα έχω +1 function, αλλά άμα θέλω να το δώσω σε όλες της functions του προγράμματός μου δεν είναι βολικό... ---------- Το μήνυμα προστέθηκε στις 18:32 ---------- Για να μη σας μπερδεύω (και παιδεύω). Υπάρχει κάποιος κώδικας που εκτελείται με το πάτημα ενός κουμπιού. Αυτός ο κώδικας δημιουργεί ένα αντικείμενο. > private void Button1_Click(object sender, EventArgs e) { Foo obj = new Foo(); //mplamplampla kwdikas pou ektokseuei pyrinikes kefales } και τώρα υπάρχει ένα άλλο κουμπί που πρέπει να καλέσει μια μέθοδο του αντικειμένου που δημιουργήσαμε > private void Button2_Click(object sender, EventArgs e) { obj.Method(); //mplamplampla kwdikas poy katastrefei planhtes }
Evgenios1 Δημοσ. 4 Νοεμβρίου 2009 Δημοσ. 4 Νοεμβρίου 2009 1) >using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Reflection; namespace cs22 { class Program { static void Main(string[] args) { Κοκκινοσκουφιτσα kok = new Κοκκινοσκουφιτσα(); kok.ΟτιΝαναι(); kok.ΟτιΝαναι1(); Console.Read(); } } class Κοκκινοσκουφιτσα { object obj; public void ΟτιΝαναι() { obj = "Στρινg"; } public void ΟτιΝαναι1() { if (obj != null) { if (obj is string) { Console.WriteLine(obj.ToString()); } } } } } 2) >using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Reflection; namespace cs22 { class Program { static void Main(string[] args) { Κοκκινοσκουφιτσα kok = new Κοκκινοσκουφιτσα(); kok.ΟτιΝαναι(); kok.ΟτιΝαναι1(); Console.Read(); } } class StaticObjects { public static object Obj1; public static object Obj2; } class Κοκκινοσκουφιτσα { object obj; public void ΟτιΝαναι() { StaticObjects.Obj1 = "tanga"; } public void ΟτιΝαναι1() { if (StaticObjects.Obj1 != null) { if (StaticObjects.Obj1 is string) { Console.WriteLine(StaticObjects.Obj1.ToString()); } } } } }
Haros Δημοσ. 4 Νοεμβρίου 2009 Μέλος Δημοσ. 4 Νοεμβρίου 2009 χμμ δεν νομίζω πως μπορεί να βοηθήσει αυτό. Θα ήθελα το αντικείμενο της Κοκκινοσκουφίτσας μέσα στη function Giagia >static void Giagia(string[] args) { Κοκκινοσκουφιτσα kok = new Κοκκινοσκουφιτσα(); kok.ΟτιΝαναι(); kok.ΟτιΝαναι1(); Console.Read(); } να μπορεί να το χρησιμοποιήσει και ο λύκος μαζί με τις μεθόδους του (του αντικειμένου όχι του λύκου ). >static void Lykos(string[] args) { kok.ΟτιΝαναι(); kok.ΟτιΝαναι1(); } Ο κώδικας της κλάσης της Κοκκινοσκουφίτσας νομίζω μας είναι αδιάφορος. Θα μπορούσε κάλλιστα να είναι κάποια έτοιμη κλάση της c#...
Evgenios1 Δημοσ. 4 Νοεμβρίου 2009 Δημοσ. 4 Νοεμβρίου 2009 Καλα ρε... Γιατι δε φτιαχνεις ενα member στη class ? Αυτο δεν γινετε σε πολλες γλωσσες > { int i = 0; } { i++; }
Haros Δημοσ. 5 Νοεμβρίου 2009 Μέλος Δημοσ. 5 Νοεμβρίου 2009 Βασικά σκεφτόμουν άμα μπορεί να γίνει με singleton pattern.
warchief Δημοσ. 5 Νοεμβρίου 2009 Δημοσ. 5 Νοεμβρίου 2009 Οπως λεει παραπάνω και ο ευγένιος, αν το button1 και button2 είναι μέθοδοι τις ίδιας κλάσης, γιατι δεν βάζεις το αντικέιμενο Foo σαν member της κλάσης? Επίσης τι σχέση έχει το singleton pattern με όλα αυτά?
Evgenios1 Δημοσ. 5 Νοεμβρίου 2009 Δημοσ. 5 Νοεμβρίου 2009 ποστ 7 >namespace cs22 { class Program { static void Main(string[] args) { { StaticObjects.Obj1 = "string"; } { Console.WriteLine(StaticObjects.Obj1); } Console.Read(); } } sealed class StaticObjects { public static object Obj1; } }
Haros Δημοσ. 5 Νοεμβρίου 2009 Μέλος Δημοσ. 5 Νοεμβρίου 2009 άκυρο το Singleton pattern απλά ψαχνόμουν εκείνη την ώρα στο google και το έβλεπα. τελικά οκ βρήκα άκρη. Με λίγη βοήθεια από τους κώδικες του Ευγένιου Σας ευχαριστώ όλους για την βοήθεια
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.