گفتگو هایی در باب سی شارپ

the_king

مدیرکل انجمن
آها خیلی ممنون .
پس sdk اولا نرم افزار هه (کلا هر چیزی که kit هست ، نرم افزاره؟) و دوما برای زمانی کاربرد داره که معمولا بخوایم برای اون نرم افزار ، پلاگینی بنویسیم و یا کارهای دیگه .
الزاما نرم افزار یا فقط نرم افزار نیست، ممکنه فقط Template یک کد برنامه باشه که باید تغییرش بدهید، یا مستندات و تصاویر و نمونه کد و فایل های جانبی زیادی ممکنه در Kit باشند که نرم افزار بحساب نیان.

استاد ، من هنوز متوجه نشدم که چرا میگن Android Studio قویتر از Xamarin عمل میکنه .
آخه Android Studio که از جاوا استفاده میکنه که یه زبان تحت ماشین مجازی هه و از اون طرف هم Xamarin از سی شارپ استفاده میکنه که دقیقا همینطوره . پس از لحاظ سرعت باید تقریبا در یه حد باشن .
هر api ای هم که Android Studio استفاده میکنه را هم Xamarin.Android هم استفاده میکنه .
پس تفاوت شون کجاست که میگن Android Studio قویتر عمل میکنه؟
اگر کسی حرفی زده خودش باید توضیح بده که چرا اون حرف رو زده، من اینطور مقایسه ای نمی تونم بکنم که کدوم قوی تر عمل می کنه، با هم مسابقه مچ اندازی ندادن که ببینیم بازوی کدوم یکی قوی تر ئه.
 

SajjadKhati

کاربر فعال <A href="http://forum.majidonline.com/f
الزاما نرم افزار یا فقط نرم افزار نیست، ممکنه فقط Template یک کد برنامه باشه که باید تغییرش بدهید، یا مستندات و تصاویر و نمونه کد و فایل های جانبی زیادی ممکنه در Kit باشند که نرم افزار بحساب نیان.


اگر کسی حرفی زده خودش باید توضیح بده که چرا اون حرف رو زده، من اینطور مقایسه ای نمی تونم بکنم که کدوم قوی تر عمل می کنه، با هم مسابقه مچ اندازی ندادن که ببینیم بازوی کدوم یکی قوی تر ئه.

خیلی ممنون استاد
منظورم از اینکه گفتم : میگن ؛ این بود که اغلب برنامه نویس ها این نظر را دارند . نه اینکه خودم از کسی سئوال کرده باشم . در سایت ها و انجمن ها که سئوال میپرسیدن ، میدیدم . سایت های خارجی هم بیشتر تمایل به استفاده از android studio دارن (هر چند زامارین را هم خوب میدونن ولی در کل اینو میگن که نظرشون برای برنامه نویسی حرفه ای تر ، android studio هست) .
 

the_king

مدیرکل انجمن
خیلی ممنون استاد
منظورم از اینکه گفتم : میگن ؛ این بود که اغلب برنامه نویس ها این نظر را دارند . نه اینکه خودم از کسی سئوال کرده باشم . در سایت ها و انجمن ها که سئوال میپرسیدن ، میدیدم . سایت های خارجی هم بیشتر تمایل به استفاده از android studio دارن (هر چند زامارین را هم خوب میدونن ولی در کل اینو میگن که نظرشون برای برنامه نویسی حرفه ای تر ، android studio هست) .
پلتفرم متعلق به گوگل ئه، بهترین شناخت رو از سیستم عامل اش داره. زبان برنامه نویسی اصلی سیستم عامل اش هم جاوا است که بین همه زبان های برنامه نویسی پر استفاده ترین در حال حاضر ئه.
محیط طراحی و برنامه نویسی و زبان توجه سازنده سیستم عامل هم مشخص ئه، تولید کننده اش هم خودشه، Android Studio هم بر پایه محیطی طراحی شده که نزدیک به 20 سال تجربه داشته.
بدیهی هم هست که سازنده اش تمام تلاشش رو هم می کنه که کارایی و قدرت سیستم عاملش رو در محیط طراحی نشون بده، هر تغییری هم که در سیستم عامل میده در Android Studio منعکس می کنه.
در مقابل Xamarin محصول یک شرکت کوچک در مقایسه با مایکروسافت و گوگل بوده که تازه چند سال ئه مایکروسافت خریدتش و معلوم نیست چقدر مایکروسافت در بهبود طراحی اش نقش داشته.
 

SajjadKhati

کاربر فعال <A href="http://forum.majidonline.com/f
پلتفرم متعلق به گوگل ئه، بهترین شناخت رو از سیستم عامل اش داره. زبان برنامه نویسی اصلی سیستم عامل اش هم جاوا است که بین همه زبان های برنامه نویسی پر استفاده ترین در حال حاضر ئه.
محیط طراحی و برنامه نویسی و زبان توجه سازنده سیستم عامل هم مشخص ئه، تولید کننده اش هم خودشه، Android Studio هم بر پایه محیطی طراحی شده که نزدیک به 20 سال تجربه داشته.
بدیهی هم هست که سازنده اش تمام تلاشش رو هم می کنه که کارایی و قدرت سیستم عاملش رو در محیط طراحی نشون بده، هر تغییری هم که در سیستم عامل میده در Android Studio منعکس می کنه.
در مقابل Xamarin محصول یک شرکت کوچک در مقایسه با مایکروسافت و گوگل بوده که تازه چند سال ئه مایکروسافت خریدتش و معلوم نیست چقدر مایکروسافت در بهبود طراحی اش نقش داشته.

بله .
توی سایت های خارجی ، یه سری همین ها را میگن و اینها را دلایل برتری Android Studio میدونن . اینکه توسط گوگل که خودش اندروید را طراحی کرد ، ساخته شد و ... .
اما با این حال سایت هایی هم هستند که اعتقاد دارن که هر کاری که در Android Studio میشه انجام داد را ، در Xamarin هم میشه انجام داد . من هم سئوالم اینه که وقتی api ای که هر دو استفاده میکنن ، یکی هه و حتی قدرت زبان ها و سرعت شون هم تقریبا یکی هه ، حالا چه Android Studio و سیستم عامل اندروید را گوگل طراحی کرده باشه یا نه ، پس نباید تاثیر خاصی در نتیجه ی نوشتن برنامه داشته باشه . مگه داره؟
 

the_king

مدیرکل انجمن
بله .
توی سایت های خارجی ، یه سری همین ها را میگن و اینها را دلایل برتری Android Studio میدونن . اینکه توسط گوگل که خودش اندروید را طراحی کرد ، ساخته شد و ... .
اما با این حال سایت هایی هم هستند که اعتقاد دارن که هر کاری که در Android Studio میشه انجام داد را ، در Xamarin هم میشه انجام داد . من هم سئوالم اینه که وقتی api ای که هر دو استفاده میکنن ، یکی هه و حتی قدرت زبان ها و سرعت شون هم تقریبا یکی هه ، حالا چه Android Studio و سیستم عامل اندروید را گوگل طراحی کرده باشه یا نه ، پس نباید تاثیر خاصی در نتیجه ی نوشتن برنامه داشته باشه . مگه داره؟
همه چیز سرعت و قدرت نیست.
احتمالا در مقایسه کاری به میزان منابع آموزشی و نمونه کد ها و تجربه برنامه نویسان و ... ندارید
++C بدون شک یک زبان حرفه ای و خیلی قدرتمند ئه، سرعت اجرای کدش هم بصورت محسوسی از جاوا و #C بیشتر ئه، قابلیت های سطح پایینی هم داره که جاوا و #C نمی توانند داشته باشند و هر کاری که با ++C میشه انجام داد الزاما جاوا و #C برای انجامش مناسب نیستند. اما این دلیل نمیشه که چون ++C برتری هایی داره پس برنامه نویسان باید گرایش شون به ++C بیشتر باشه.
 

SajjadKhati

کاربر فعال <A href="http://forum.majidonline.com/f
خیلی ممنون استاد .
استاد ، اینجا را نگاه کنید :

سوال: مطلع شدن همه فرمهای برنامه از یک رویداد سیستمی

من هر کاری کردم ، نتونستم کاری کنم که با کلاس EventLog ، اطلاعات مربوط به مسیر "Applications and Services Logs/Microsoft/Windows/UniversalTelemetryClient/Operational" در برنامه ی Event Viewer را رصد کنم .
نمیدونم مقدار Log یا LogName در این کلاس را چی باید بدم .
توی اینجا :

EventLog.Log Property (System.Diagnostics)

نوشته "Applications and services use the Application log file."
چون اون مسیر ، زیر مجموعه ی Applications and Services Logs هست ، و طبق گفته ی بالا ، من مقدار LogName را "Application" دادم ، باز هم اطلاعات اون مسیر را نداد و رویدادهای اجرا شده اش را بهم مخابره نکرد . کدم این بود :

کد:
        private EventLog eventLog;
        private void Button_Click_2(object sender, RoutedEventArgs e)
        {
            this.eventLog = new EventLog("Application");
            this.eventLog.EntryWritten += new EntryWrittenEventHandler(this.MyEventLog_EntryWritten);
            this.eventLog.EnableRaisingEvents = true;
        }

        private void MyEventLog_EntryWritten(object sender, EntryWrittenEventArgs e)
        {
            MessageBox.Show(e.Entry.Message);
        }

        private void Window_Closed(object sender, EventArgs e)
        {
            if (this.eventLog != null)
                this.eventLog.Dispose();
        }

بعد هم گفتم LogName ای که در قسمت اطلاعاتی که در اون مسیر در Event Viewer میده را که "Microsoft-Windows-UniversalTelemetryClient/Operational" بود را بدم ، این که کلا ارور داد .
شما میدونین مشکل از کجاست و چجوری میشه اطلاعات اون مسیر را گرفت؟
 
آخرین ویرایش:

the_king

مدیرکل انجمن
خیلی ممنون استاد .
استاد ، اینجا را نگاه کنید :

سوال: مطلع شدن همه فرمهای برنامه از یک رویداد سیستمی

من هر کاری کردم ، نتونستم کاری کنم که با کلاس EventLog ، اطلاعات مربوط به مسیر "Applications and Services Logs/Microsoft/Windows/UniversalTelemetryClient/Operational" در برنامه ی Event Viewer را رصد کنم .
نمیدونم مقدار Log یا LogName در این کلاس را چی باید بدم .
توی اینجا :

EventLog.Log Property (System.Diagnostics)

نوشته "Applications and services use the Application log file."
چون اون مسیر ، زیر مجموعه ی Applications and Services Logs هست ، و طبق گفته ی بالا ، من مقدار LogName را "Application" دادم ، باز هم اطلاعات اون مسیر را نداد و رویدادهای اجرا شده اش را بهم مخابره نکرد . کدم این بود :

کد:
        private EventLog eventLog;
        private void Button_Click_2(object sender, RoutedEventArgs e)
        {
            this.eventLog = new EventLog("Application");
            this.eventLog.EntryWritten += new EntryWrittenEventHandler(this.MyEventLog_EntryWritten);
            this.eventLog.EnableRaisingEvents = true;
        }

        private void MyEventLog_EntryWritten(object sender, EntryWrittenEventArgs e)
        {
            MessageBox.Show(e.Entry.Message);
        }

        private void Window_Closed(object sender, EventArgs e)
        {
            if (this.eventLog != null)
                this.eventLog.Dispose();
        }

بعد هم گفتم LogName ای که در قسمت اطلاعاتی که در اون مسیر در Event Viewer میده را که "Microsoft-Windows-UniversalTelemetryClient/Operational" بود را بدم ، این که کلا ارور داد .
شما میدونین مشکل از کجاست و چجوری میشه اطلاعات اون مسیر را گرفت؟
ویندوز من 7 ئه و خدا رو شکر UniversalTelemetryClient نداره. امتحان کنید :
کد:
            var query = new System.Diagnostics.Eventing.Reader.EventLogQuery
                ("Microsoft-Windows-UniversalTelemetryClient/Operational", System.Diagnostics.Eventing.Reader.PathType.LogName, "*");
            using (var reader = new System.Diagnostics.Eventing.Reader.EventLogReader(query))
            {
                var record = reader.ReadEvent();
                while (record != null)
                {
                    listBox1.Items.Add(record.FormatDescription() ?? "empty");
                    record = reader.ReadEvent();
                }
            }
 

SajjadKhati

کاربر فعال <A href="http://forum.majidonline.com/f
ویندوز من 7 ئه و خدا رو شکر UniversalTelemetryClient نداره. امتحان کنید :
کد:
            var query = new System.Diagnostics.Eventing.Reader.EventLogQuery
                ("Microsoft-Windows-UniversalTelemetryClient/Operational", System.Diagnostics.Eventing.Reader.PathType.LogName, "*");
            using (var reader = new System.Diagnostics.Eventing.Reader.EventLogReader(query))
            {
                var record = reader.ReadEvent();
                while (record != null)
                {
                    listBox1.Items.Add(record.FormatDescription() ?? "empty");
                    record = reader.ReadEvent();
                }
            }

خیلی ممنون استاد .
بله استاد . انگار در وهله ی اول ، کار میکنه (انگار تمام پیام هایی که لیست کرد ، همون پیام های قسمت UniversalTelemetryClient هستند) .
میگم انگار ، چون تعداد پیام ها خیلی زیادن و من 10 تای اول را چک کردم ولی به احتمال بسیار زیاد درسته .
حالا نمیدونم موقعی که پیام جدیدی میاد هم اطلاع میده (یا اینکه صرفا با این کد پیام هایی را که تا موقع اجرای این کد در event viewer موجود هست را لیست میکنه)؟

راه حل این قضیه هم اینه که بجای استفاده از کلاس EventLog ، باید از کلاس EventLogQuery استفاده کنیم؟
 

the_king

مدیرکل انجمن
خیلی ممنون استاد .
بله استاد . انگار در وهله ی اول ، کار میکنه (انگار تمام پیام هایی که لیست کرد ، همون پیام های قسمت UniversalTelemetryClient هستند) .
میگم انگار ، چون تعداد پیام ها خیلی زیادن و من 10 تای اول را چک کردم ولی به احتمال بسیار زیاد درسته .
حالا نمیدونم موقعی که پیام جدیدی میاد هم اطلاع میده (یا اینکه صرفا با این کد پیام هایی را که تا موقع اجرای این کد در event viewer موجود هست را لیست میکنه)؟

راه حل این قضیه هم اینه که بجای استفاده از کلاس EventLog ، باید از کلاس EventLogQuery استفاده کنیم؟
نمیدونم EventLog کلا به این جور رخداد ها دسترسی نداره یا پارامتر های لازم رو درست نمی دهیم که با خطا روبرو میشه یا برای دسترسی به اون رخداد ها کار خاصی باید انجام بشه.
اما این رو میدونم که در لیست نمیاد :
کد:
            foreach (var log in EventLog.GetEventLogs())
            {
                listBox1.Items.Add(log.Log);
            }
شما اطلاعات اون مسیر رو خواستید که اون کد رو نوشتم، اگر میخواهید صرفا از رخداد های جدید با خبر شوید از EventLogWatcher استفاده می کنید :
کد:
        private System.Diagnostics.Eventing.Reader.EventLogWatcher _watcher;

        private void AddLog(object message)
        {
            if (InvokeRequired)
            {
                Invoke(new ParameterizedThreadStart(AddLog), new object[] { message });
                return;
            }
            listBox1.Items.Add(message);
        }

        private void button1_Click(object sender, EventArgs e)
        {
            var query = new System.Diagnostics.Eventing.Reader.EventLogQuery
                ("Microsoft-Windows-UniversalTelemetryClient/Operational", System.Diagnostics.Eventing.Reader.PathType.LogName, "*");
            _watcher = new System.Diagnostics.Eventing.Reader.EventLogWatcher(query);
            _watcher.EventRecordWritten += Watcher_EventRecordWritten;
            _watcher.Enabled = true;
        }

        private void Watcher_EventRecordWritten(object sender, System.Diagnostics.Eventing.Reader.EventRecordWrittenEventArgs e)
        {
            AddLog(e.EventRecord.FormatDescription());
        }

        private void Form1_FormClosing(object sender, FormClosingEventArgs e)
        {
            _watcher?.Dispose();
        }
 

SajjadKhati

کاربر فعال <A href="http://forum.majidonline.com/f
نمیدونم EventLog کلا به این جور رخداد ها دسترسی نداره یا پارامتر های لازم رو درست نمی دهیم که با خطا روبرو میشه یا برای دسترسی به اون رخداد ها کار خاصی باید انجام بشه.
اما این رو میدونم که در لیست نمیاد :
کد:
            foreach (var log in EventLog.GetEventLogs())
            {
                listBox1.Items.Add(log.Log);
            }
شما اطلاعات اون مسیر رو خواستید که اون کد رو نوشتم، اگر میخواهید صرفا از رخداد های جدید با خبر شوید از EventLogWatcher استفاده می کنید :
کد:
        private System.Diagnostics.Eventing.Reader.EventLogWatcher _watcher;

        private void AddLog(object message)
        {
            if (InvokeRequired)
            {
                Invoke(new ParameterizedThreadStart(AddLog), new object[] { message });
                return;
            }
            listBox1.Items.Add(message);
        }

        private void button1_Click(object sender, EventArgs e)
        {
            var query = new System.Diagnostics.Eventing.Reader.EventLogQuery
                ("Microsoft-Windows-UniversalTelemetryClient/Operational", System.Diagnostics.Eventing.Reader.PathType.LogName, "*");
            _watcher = new System.Diagnostics.Eventing.Reader.EventLogWatcher(query);
            _watcher.EventRecordWritten += Watcher_EventRecordWritten;
            _watcher.Enabled = true;
        }

        private void Watcher_EventRecordWritten(object sender, System.Diagnostics.Eventing.Reader.EventRecordWrittenEventArgs e)
        {
            AddLog(e.EventRecord.FormatDescription());
        }

        private void Form1_FormClosing(object sender, FormClosingEventArgs e)
        {
            _watcher?.Dispose();
        }

خیلی ممنون استاد . :rose:
بله این کد کار میکنه .
پس برای رصد بخش خاصی از برنامه ی event viewer ، بجای کلاس EventLog ، باید از کلاس EventLogWatcher استفاده کنیم؟

ویندوز 7 گفتین این گزینه ی UniversalTelemetryClient را نداره؟
یعنی توی ویندوز 10 اضافه شد (یا مثلا از ویندوز 8 هم اضافه شده بود) ؟
 

sahar.hg

New Member
بنام خدا
من یک تاپیک لازم داشتم تا مطالب نامنظم را گرد بیاورم.
حالا می تواند تکه کوچکی آموزش باشد
یا نظری شخصی راجع به سی شارپ



مطالب این تاپیک را من نمی توانم نظری راجع بهش بدهم چون تجربه کافی ندارم.
فقط حالت پاتوقی برای یادداشتهایی راجع به سی شارپ است.


من در نهایت امانت فقط نقل کننده ام.
درستی یا نادرستی مطالب را کاری ندارم.


هر کس هم هر مطلبی خواست اینجا بزنه. فقط راجع به سی شارپ باشه یا کلا دات نت.


==========================
تاپیک های مربوط:
mvc رو هم شامل میشه این تاپیک؟
 

the_king

مدیرکل انجمن
خیلی ممنون استاد . :rose:
بله این کد کار میکنه .
پس برای رصد بخش خاصی از برنامه ی event viewer ، بجای کلاس EventLog ، باید از کلاس EventLogWatcher استفاده کنیم؟
در مورد بجای اش مطمئن نیستم، قدری متفاوت هستند، اما کار EventLogWatcher همونه که می بینید.

ویندوز 7 گفتین این گزینه ی UniversalTelemetryClient را نداره؟
یعنی توی ویندوز 10 اضافه شد (یا مثلا از ویندوز 8 هم اضافه شده بود) ؟
خاص ویندوز 10 ئه. در ویندوز های قدیمی تر با آپدیت یک اجزایی بصورت اختیاری اضافه میشه که Telemetry به حساب میاد اما کارکردش قابل قیاس با ویندوز 10 نیست.
 

the_king

مدیرکل انجمن
mvc رو هم شامل میشه این تاپیک؟
اگه منظورتون خود الگوی طراحی MVC باشه، پیاده سازی اش در #C رو میتونه شامل بشه، چون MVC خاص زبان و پلتفرم خاصی نیست، البته تا حالا صحبتی در این مورد نبوده.
اما اگر منظورتون ASP.NET MVC یا ASP.NET Core MVC باشه، نه. تمرکز روی خود زبان #C و برنامه های دسکتاپ ویندوز ئه.
 

SajjadKhati

کاربر فعال <A href="http://forum.majidonline.com/f
استاد ، میگم بعد از یادگیری wpf ، به نظرتون سمت برنامه نویسی وب برم یا برنامه نویسی موبایل؟
البته ان شاء ا... همینطور که wpf را یاد میگیرم ، میخوام آموزشش را هم بدم (این بار برای فروش) . ولی نمیدونم کجا میتونم بفروشم . شما سایت (یا سایت هایی) برای فروش میشناسین که مثلا یه درصدی را اونها بگیرن و سرویس خوبی و همچنین بازدید خوبی اون سایت داشته باشه برای فروش بهتر؟ (خیلی ممنون که هم توی سی شارپ و هم در یادگیری wpf کمکم کردین و میکنین:rose: ) .


حالا بحث برنامه نویسی وب یا موبایل را ادامه بدم .
به نظرتون کدوم بازار کار بهتری داره؟ (اینو در نظر بگیرین که من فعلا تو خونه کار میکنم . یعنی مثلا جایی یا در شرکتی نیستم که مثلا اونها برنامه نویسی وب را در الویت داشته باشن و بنابراین من الویت ام برنامه نویسی وب باشه) .
کلا برای کسب درآمد (حالا چه زمانی که با شرکت ها کار کنیم یا مخصوصا الان که در خونه هستم) ، برنامه نویسی وب در آمدش بهتره یا موبایل و اختلاف بازار کارش از لحاظ درآمد ، چقدره؟
من الان نمیدونم اصلا از توی خونه ، چجوری درآمد کسب کنم .
فقط آموزش را که درست بشه و اون هم اگه سایتی پیدا بشه تا آموزش هام را برای فروش بذاره ، ان شاء ا... میشه از این طریق در آمد داشت (اما سایت هایی که این کار را برای آموزش هامون میکنن را نمیشناسم) .
اما مثلا وقتی پروژه ای مثل همین نرم افزار "پشتیبان گیر طلوع" (برای پشتیبان گیری vss که در جریان اید) یا نرم افزار "اتوران طلوع" (که ان شاء ا... در آینده ی اندکی دور قراره بسازم) که برای ویندوز هست را وقتی بسازم ، نمیدونم سایتی پیدا میشه برای فروش توش بذارم یا نه (البته قبلا هم سایتی را معرفی کرده بودین در این زمینه) و هم مهمتر اینکه اصلا کسی این نوع پروژه ها را میخره یا نه .


حالا خوشبختانه به نظرم در بخش زامارین ، آموزش اش خیلی بصورت دقیق و حرفه ای توی اینترنت نیست یا کم هست و میشه روی آموزشش کار کرد و فروخت اما خوب من اگه طرف زامارین برم ، حداقل چند ماه تا یک سال شاید یادگیری اش طول بکشه (و احتمالا هم یک سال هم زمان آموزشش طول میکشه تا ساخته و تمام بشه) . اما بازم نمیدونم پروژه های موبایل را هم چجوری و در کجا میشه فروخت .

کلا استاد یه کم درباره ی بازار کار صحبت میکنین؟
اینکه از پروژه های ویندوزی تا پروژه های موبایل و پروژه های وب را چجوری و کجا میشه فروخت و توی هر کدوم از این ها ، چه نوع پروژه ای ساخته بشه ، خریدارش بهتر هه ؟
و اینکه به نظرتون علاوه بر ویندوز ، برنامه نویسی وب بهتر هه یا موبایل (چه از لحاظ زمانی که برای یادگیری شون صرف میکنینم و چه از لحاظ فروش پروژه هاشون) .
و هم اینکه از لحاظ فروش آموزش های این ها (آموزش تکنولوژی های مربوط به وب و تکنولوژی زامارین) کدوم بهتر هه؟

خودم حس میکنم چون در ویندوز ، با نرم افزارهای آفلاین بیشتر کار کردم ، بین وب و موبایل (زامارین) ، موبایل را بهتر و زودتر درک میکنم .

----------------------------------------------------

بعد اینکه توی لینک زیر :

Android & iOS Apps with Xamarin | .NET

که سایت رسمی مایکروسافت هست ، نوشته :

کد:
Use the full power of the Android SDK to build apps for any Android platform. With C#, you can develop for phone, tablet, watch, and television.

که میگه xamarin.android قدرت کامل Android SDK را میتونه براتون به ارمغان بیاره .
اگه تفاوتی بین زامارین و اندروید استودیو باشه ، فکر نکنم زیاد باشه . هست؟
یا حداقل واسه ی کاربرانی مثل ما (نه پروژه های خیلی عظیم و بزرگ سازمانی) ، انتخاب زامارین ، با اندروید استودیو خیلی نباید فرق کنه . میکنه؟

خیلی ممنون استاد :rose:
 
آخرین ویرایش:

the_king

مدیرکل انجمن
استاد ، میگم بعد از یادگیری wpf ، به نظرتون سمت برنامه نویسی وب برم یا برنامه نویسی موبایل؟
نظر کلی من رو میدونید، که برای چیزی که قراره الان رویش کار کنید مطالعه کنید. مثلا اگر قرار نیست تا 6 ماه بعد برای موبایل برنامه نویسید پس الان وقت یادگیری اش نیست. تا 6 ماه بعد ممکنه نظرتون عوض بشه، تکنولوژی جدیدی بیاد، تکنولوژی هایی منسوخ بشه. برای یادگرفتن دانشی که الان لازمش ندارید وقت نذارید.

البته ان شاء ا... همینطور که wpf را یاد میگیرم ، میخوام آموزشش را هم بدم (این بار برای فروش) . ولی نمیدونم کجا میتونم بفروشم . شما سایت (یا سایت هایی) برای فروش میشناسین که مثلا یه درصدی را اونها بگیرن و سرویس خوبی و همچنین بازدید خوبی اون سایت داشته باشه برای فروش بهتر؟ (خیلی ممنون که هم توی سی شارپ و هم در یادگیری wpf کمکم کردین و میکنین:rose: ) .
جای معرفی سایت در این تاپیک نیست، قبلا در پاسخ پیام "اتمام کار کنترل" شما یک سایت معرفی کرده بودم.

حالا بحث برنامه نویسی وب یا موبایل را ادامه بدم .
به نظرتون کدوم بازار کار بهتری داره؟ (اینو در نظر بگیرین که من فعلا تو خونه کار میکنم . یعنی مثلا جایی یا در شرکتی نیستم که مثلا اونها برنامه نویسی وب را در الویت داشته باشن و بنابراین من الویت ام برنامه نویسی وب باشه) .
کلا برای کسب درآمد (حالا چه زمانی که با شرکت ها کار کنیم یا مخصوصا الان که در خونه هستم) ، برنامه نویسی وب در آمدش بهتره یا موبایل و اختلاف بازار کارش از لحاظ درآمد ، چقدره؟
من الان نمیدونم اصلا از توی خونه ، چجوری درآمد کسب کنم .
فقط آموزش را که درست بشه و اون هم اگه سایتی پیدا بشه تا آموزش هام را برای فروش بذاره ، ان شاء ا... میشه از این طریق در آمد داشت (اما سایت هایی که این کار را برای آموزش هامون میکنن را نمیشناسم) .
اما مثلا وقتی پروژه ای مثل همین نرم افزار "پشتیبان گیر طلوع" (برای پشتیبان گیری vss که در جریان اید) یا نرم افزار "اتوران طلوع" (که ان شاء ا... در آینده ی اندکی دور قراره بسازم) که برای ویندوز هست را وقتی بسازم ، نمیدونم سایتی پیدا میشه برای فروش توش بذارم یا نه (البته قبلا هم سایتی را معرفی کرده بودین در این زمینه) و هم مهمتر اینکه اصلا کسی این نوع پروژه ها را میخره یا نه .
اینکه روی چی کار کنید مهم نیست، اینکه مهارت و نو آوری و کیفیت تولید محصول در چه حدی باشه مهم ئه، خودتون تعیین کننده هستید نه بازار کار.
اگه یک محصول با کیفیت و ممتاز تولید کنید، فروشنده و بازاریاب ها خودشون دنبال تون می گردند و پیدا تون می کنند. لازم نیست که خودتون هم به فکر تولید باشید و هم به فکر فروش و بازاریابی.
حتی اگر انتخابی بکنید که مخاطب اش هم کم باشه، بخاطر تخصصی بودنش قیمت فروش اش می تونه بالاتر باشه. البته بحث اش ربطی به این تاپیک نداره.

بعد اینکه توی لینک زیر :

Android & iOS Apps with Xamarin | .NET

که سایت رسمی مایکروسافت هست ، نوشته :

کد:
Use the full power of the Android SDK to build apps for any Android platform. With C#, you can develop for phone, tablet, watch, and television.

که میگه xamarin.android قدرت کامل Android SDK را میتونه براتون به ارمغان بیاره .
اگه تفاوتی بین زامارین و اندروید استودیو باشه ، فکر نکنم زیاد باشه . هست؟
یا حداقل واسه ی کاربرانی مثل ما (نه پروژه های خیلی عظیم و بزرگ سازمانی) ، انتخاب زامارین ، با اندروید استودیو خیلی نباید فرق کنه . میکنه؟
روی جمله های تبلیغاتی قضاوت نکنید، هیچ بقالی نمیگه ماست من ترش ئه. Xamarin.Android یک پلتفرم شخص ثالث ئه، نه سازنده خود سیستم عامل.
انگار برای طراحی PDF بجای Adobe Acrobat از یک محصول متفرقه استفاده کنید، هر چقدر هم محصول خوبی باشه، محصول شخص ثالث ئه، محصول خود Adobe نیست.
مستقل از اینکه Microsoft Office چقدر رقیب داشته باشه یا چقدر کیفیت بهتری داشته باشه، همینکه محصول سازنده اصلی ئه امتیاز بزرگی ئه، در گرایش کاربران بهش هم نقش مهمی داره.
اگر محصولی در حد Visual Studio هم بسازید جذابیت اون رو نداره، گرایش به محصول سازنده اصلی در شرایط برابر بیشتر ئه تا محصول شخص ثالث.
نه فقط به این خاطر که محصول Microsoft ئه، بخاطر اینکه سازنده پلتفرم و زبان ئه.
Android Studio همینکه محصول سازنده Android باشه نتیجه اش یکسری برتری در طراحی، جهت دهی، معماری و ... میشه. شخص ثالث همیشه باید پیرو باشه، باید سعی کنه که تا معماری محصولش با تغییرات جور در بیاد.
اما سازنده اصلی دستش باز ئه، و هر تغییری در سیستم عامل اش می تونه به بهترین شکل در Android Studio منعکس بشه چون سازنده هر دوشون خودشه.
 

SajjadKhati

کاربر فعال <A href="http://forum.majidonline.com/f
سلام
خیلی ممنون استاد .
استاد ، میشه از بخش تنظیمات (Tools>Option) در ویژال استودیو ، بکاپ گرفت و بعدا بازیابی کرد؟ اگه آره ، چجوری هه؟
یعنی مثلا فونت هایی که در بخش Option مشخص کرده بودیم و هر تنظیم دیگه ای که انجام داده بودیم را میتونیم بکاپ بگیریم تا بعدا بازیابی کنیم؟
تشکر
 

the_king

مدیرکل انجمن
سلام
خیلی ممنون استاد .
استاد ، میشه از بخش تنظیمات (Tools>Option) در ویژال استودیو ، بکاپ گرفت و بعدا بازیابی کرد؟ اگه آره ، چجوری هه؟
یعنی مثلا فونت هایی که در بخش Option مشخص کرده بودیم و هر تنظیم دیگه ای که انجام داده بودیم را میتونیم بکاپ بگیریم تا بعدا بازیابی کنیم؟
تشکر
گزینه اش خیلی جلوی چشم ئه. منوی ...Tools > Import and Export Settings
 

SajjadKhati

کاربر فعال <A href="http://forum.majidonline.com/f
سلامی مجدد استاد .
استاد ، اگه بخوام مثلا از کلاس Button ارث بری کنم و هر رسمی که در کلاس Button هست را کاری کنم که انجام نشه و رسم دلخواه خودم را انجام بدم ، راهی هست؟

متد OnPaint در Button را که اورراید میکنم ، رسم Button (با فراخونی متد base اش) ، انجام میشه و علاوه بر اون ، رسم شکل من هم انجام میشه . اگه فراخونی اش نکنم هم که رسم ها قاتی میکنن .

آیا فقط راه چاره اینه که از کلاس Control ارث بری کنیم ؟ راهی نداره که از کلاس های فرزندش که لازم داریم مثل همون Button ، ارث بری کنیم و بجاش رسم دلخواه مون را انجام بدیم؟ چون منطق اون کلاس (مثل کلاس Button و ...) را لازم دارم .
تشکر.
 

the_king

مدیرکل انجمن
سلامی مجدد استاد .
استاد ، اگه بخوام مثلا از کلاس Button ارث بری کنم و هر رسمی که در کلاس Button هست را کاری کنم که انجام نشه و رسم دلخواه خودم را انجام بدم ، راهی هست؟

متد OnPaint در Button را که اورراید میکنم ، رسم Button (با فراخونی متد base اش) ، انجام میشه و علاوه بر اون ، رسم شکل من هم انجام میشه . اگه فراخونی اش نکنم هم که رسم ها قاتی میکنن .
اگه روال base اش رو فراخوانی اش نکنید به خودی خود قاطی نمیشه، چون رسم خاصی انجام نمیشه. نیازی نیست که برای اینکار صرفا از Control ارث بری کنید.
فقط در نظر بگیرید که رسم صرفا OnPaint نیست، OnPaintBackground هم هست که برای زمینه است. در ضمن رسم میتونه خودکار یا صرفا به درخواست کنترل خودتون باشه.
اگه SetStyle(ControlStyles.AllPaintingInWmPaint, false) باشه پاک شدن زمینه در متد OnPaintBackground انجام میشه و اگر true باشه پیش از Paint زمینه پاک نمیشه.
اگر SetStyle(ControlStyles.UserPaint, false) باشه سیستم عامل برای رسم کنترل اقدام می کنه و به همین جهت رخداد Paint برای مدیریت این رسم رخ میده ولی اگر true باشه دیگه خودتون باید رسم رو انجام بدید و رخداد Paint اتفاق نمی افته.
معمولا SetStyle ها رو در متد سازنده کلاس می نویسند.
 

SajjadKhati

کاربر فعال <A href="http://forum.majidonline.com/f
اگه روال base اش رو فراخوانی اش نکنید به خودی خود قاطی نمیشه، چون رسم خاصی انجام نمیشه. نیازی نیست که برای اینکار صرفا از Control ارث بری کنید.
فقط در نظر بگیرید که رسم صرفا OnPaint نیست، OnPaintBackground هم هست که برای زمینه است. در ضمن رسم میتونه خودکار یا صرفا به درخواست کنترل خودتون باشه.
اگه SetStyle(ControlStyles.AllPaintingInWmPaint, false) باشه پاک شدن زمینه در متد OnPaintBackground انجام میشه و اگر true باشه پیش از Paint زمینه پاک نمیشه.
اگر SetStyle(ControlStyles.UserPaint, false) باشه سیستم عامل برای رسم کنترل اقدام می کنه و به همین جهت رخداد Paint برای مدیریت این رسم رخ میده ولی اگر true باشه دیگه خودتون باید رسم رو انجام بدید و رخداد Paint اتفاق نمی افته.
معمولا SetStyle ها رو در متد سازنده کلاس می نویسند.

خیلی ممنون استاد .
کد :

کد:
this.SetStyle(ControlStyles.UserPaint, true);

را درمتد سازنده نوشتم . بعد توی OnPaint ، چه base.OnPaint(pevent) را فراخونی کردم یا نه و همچنین در متد OnPaintBackground ، چه base.OnPaintBackground(pevent) را فراخونی کردم یا نه ، رسم اش مثل حالت قبلی بود .
یعنی اگه مثلا در OnPaint ، اون base.OnPaint(pevent) اش را فراخونی میکردم ، خوب علاوه بر شکل قبلی خودش ، شکل هایی که من براش رسم میکردم را رسم میکرد اما وقتی این کد را پاک میکردم ، باز هم این مشکل را داشت که پشت زمینه اش اولا سیاه میشد و دوما با مینیمایز و برگردوندن فرم ، رسم های کنترل های دیگه روی اون فرم انجام میشد .
--------------------------
راستی استاد ، در کنترل های wpf چرا متد OnPaint نداره؟ معادل متد OnPaint در کنترل های wpf ، چیه؟
 

جدیدترین ارسال ها

بالا