الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

ما الفرق بين new , override, and virtual

مغلق
بدأه Whale في 10 مايو 2006 · 13 رد · 1,994 مشاهدة · في Microsoft Visual C#.NET
مشاركة: واتساب X فيسبوك تيليجرام
#2

السلام عليكم ورحمة الله وبركاته

هذه مقالات عن Override

Ride the Override

override (C# Reference)

override

هذه مقالات عن Virtual

virtual (C# Reference)

virtual

هذه المقالات عن New

new Operator (C# Reference)

new Modifier (C# Reference)

new Constraint (C# Reference)

أعتذر لعدم الشرح لضيق الوقت لدي ، فوفقك الله إلى كل خير

تم تعديل هذه المشاركة بواسطة Ahmed H. Alawady في 10 مايو 2006 في 20:40

Name : Ahmed H. Alawady

Web Site : Alawady.info

Email : alawady_ahmed@hotmail.com

Tel : +2 012 345 6808

#4

قرأت الوصلات اعلاه و لدي ساتفسار بنسبة لل new

في الكود التالي

using System;

class CMain
{
 static void Main()
 {
  Int32 i = 10;
  Int32 j = new Int32();

  Console.WriteLine("i = {0} , j={1}",i, j);

 }
}

1- هل Int32 عبارة عن class ام struct

2- ما الفرق بين التصريح:

	Int32 i = 10;

وبين

 Int32 j = new Int32();

3- كيف يمكن ان انشئ نوع بيانات يتميز بصفات Int32 اي يمكن ان اصرح عنه بطريقتين اعلاه و كذلد يمكن ان اعين له قيمة باستخدام اسم المتغير فقط؟

مثال :

اعمل متغير اسمة whale و استطيع استخدامه بطريقة التالية:

using System;

class CMain
{
 static void Main()
 {
  Whale i = wlSomeValue; // any value accepted by Whale type
  Whale j = new Whale();

  Console.WriteLine("i = {0} , j={1}",i, j);

 }
}

ومشكورين مقدما

تحياتي

:)

#6

السلام عليكم

The C# Modifier 'new'

اقتباس
1- هل Int32 عبارة عن class ام struct

عبارة عن structure

Int32 Integer in VB , int in c# An integer from –2,147,483,648 to 2,147,483,647.

[SerializableAttribute] 
[ComVisibleAttribute(true)] 
public struct Int32 : IComparable, IFormattable, IConvertible, 
	IComparable<int>, IEquatable<int>

ودة الاسم الاساسى للint(c#.net and Integer(in VB) الموجود فى الCTS common type system.

اقتباس
2- ما الفرق بين التصريح:

كود

Int32 i = 10;

وبين

كود

Int32 j = new Int32();

وبكدة الInt32 علارة عن structure حيث int32 inhert from System.ValueType وأيضا الValueType inhert from Master class(system.object)

وبالتالى الint32 عبارة عن valuetype بمعنى أن القيم بتاعتة تخزن ف الstack وليس الheap لان عملية التخزين ف الstack أبسط من التخزين ف الheap

وبالتلى عند إستخدامك للnew operator هنا فإنك ستدعى الdefault constructor لذلك الType وبالتالى لا يوجد بيهمنا فرق!

اقتباس
3- كيف يمكن ان انشئ نوع بيانات يتميز بصفات Int32 اي يمكن ان اصرح عنه بطريقتين اعلاه و كذلد يمكن ان اعين له قيمة باستخدام اسم المتغير فقط؟

صراحة انا مش عارف إجابة السؤال دة فبحثت فوجدت ذلك اللينك

11 Creating Data Types Manually

أمتنى أن أكون وضحتلك ما تريدة :)

تم تعديل هذه المشاركة بواسطة eng_3llam في 17 مايو 2006 في 13:14

Muhammad Allam

Computer Science

@Resource(MappedURL="My Blog" )

#7

الاخ eng_3llam شكرا لك على الوصلة

المهم ما هو موجود في الوصلة قد اجاب علية Ahmed H. Alawady :)

انا اريد توضيح للاستفسارات الثلاثة اعلاه

تحياتي

:)

#8

المشكله في اسناد قيمه int الى الـ Struct بتاعك هو انه لا يستطيع تحويل الـ Int32 اليه بطريقه صريحه ولا يعرف أين سيضع تلك القيمه تماما فالـ Struct من الممكن أن يحتوي على أكثر من Field أو Members فأيهم هو المسئول عن حمل القيمه التي تود أن تسنده اليه ؟! ( ولا يمكن عمل Overload للـ operator = ).

يمكنك تفادي ذلك بعمل Overload لـ implicit operator لوضع القيمه وحفظها في أى مكان الـ Structure بتاعك. مثلا :

public struct Whale
{
public int whaleValue;

public static implicit operator Whale (int theWhaleValue)
{
Whale flyWhale;
flyWhale.whaleValue = theWhaleValue;
return flyWhale;
}
}

وبعد ذلك يمكنك الاعلان عنه عادي , وعندما تحب أن تسترجع قيمته فاسترجعها من خلال الـ whaleValue :

Whale yourWhale = 16;
Console.WriteLine(yourWhale.whaleValue);

ويمكنك عمل whaleValue كـ Property أفضل طبعا. ويمكنك أن تجعلها أصلا private وتعمل override لـ ToString لتسترجع القيمه بها :

public struct Whale
{
private int whaleValue;

public static implicit operator Whale (int theWhaleValue)
{
Whale flyWhale;
flyWhale.whaleValue = theWhaleValue;
return flyWhale;
}
public override string ToString()
{
return whaleValue.ToString();
}
}

ويمكنك الآن استخدام Whale بعد التعديل :

Whale yourWhale = 16;
Console.WriteLine(yourWhale);

أو هكذا :

Whale yourWhale = new Whale();
int yourInt = 44;
yourWhale = yourInt + 56;
yourWhale = 15;
Console.WriteLine(yourWhale);
Whale myWhale = yourWhale;
.. تعامل عادي...

أو الخ , فتعامل معه عادي ,, واذا أردت أن تضيف امكانيات المعاملات + و += والخ فاعمل Overloading لهم.

المشكله هنا هو عند اسناد قيمه جديده للـ Whale فانه يقوم بعمل Whale جديد خلف الكواليس ! وبالطبع هذا يؤثر على الذاكره ... فيذكرني هذا الأمر قليلا بالـ string ... فكلما عدلت في القيمه التي تحملها أو غيرت فيها فانه يتم خلف الكواليس عمل string جديده تماما في مكان جديد داخل الذاكره لتحتوي على القيمه القديمه بعد التعديل ويتم الاشاره على عنوان المتغير الجديد بدلا من المتغير القديم , ولهذا ينصح بشده استخدام StringBuilder بدلا من string اذا كنا سنضيف وسنعدل كثيرا حتى توفر في الذاكره.

على كل حال أنا لا أى داعي لصنع DataTypes بمثل هذه الطرق.

#Read

http://MoutazShams.blogspot.com

projects003.gif

أعتذر عن التغيب هذه الأيام نظرا للانشغال المريب

#9

شكرا جزيلا للاخ eng_3llam و ل معتز شمس

حاولت اضافت

 public static Whale staticWhaleValue;

هل تعتقد ان هذا سيحسن الكفائة ام ما زالت المشكلة قائمة

using System;

public struct Whale
{
  private int whaleValue;
  public static Whale staticWhaleValue;

	public static implicit operator Whale (int theWhaleValue)
	{
		 //Whale flyWhale;
		   //flyWhale.whaleValue = theWhaleValue;
		 //return flyWhale;
		 staticWhaleValue.whaleValue = theWhaleValue;
		 return staticWhaleValue;
		}

	public override string ToString()
	{
	   return whaleValue.ToString();
	}
}

class CMain
{
	static void Main()
	{
	 Whale w1 = 10;
	 Whale w2 = 20;

	 Console.WriteLine(w1);
	}

}

تحياتي

:)

#11

اجعل private staticWhaleValue.

عموما لا أدري اذا كان ذلك سيحسن الكفاءه أم لا, انتظرني بعد الامتحانات لنقوم بعمل بعض الـ Optimization.

#Read

http://MoutazShams.blogspot.com

projects003.gif

أعتذر عن التغيب هذه الأيام نظرا للانشغال المريب

#13

السلام عليكم

new مع ال classes لاستدعاء الconstructor

ومع ال structures لعمل initialization لل value type

وعلي فكره ال struct ممكن يحتوي constructors

وممكن نستخدم new عند توريث داله ونريد اخفائها أو عمل بديل لها في ال child class وبتكون مكان overrides في حاله virtual

#14

الاخ أحمد هذا جيد ولكن نحن الان بصدد معرفة ان كانت الطريقة اعلاه ستؤثر على الكفاءة ام لا

مثال: دعنا نفترض بأننا نرغب بعمل Data Type بأسم Whale يمثل مجموعة من الافعال Actions التي يمكن القيام بها من قبل حوت ما للعبة كمبيوتر مثلا :)

اذا كان هذا لن يؤثر على الكفائة فهذا سيسهل عملية البرمجة و وضوح الكود

using System;

public enum WhaleValues {wlJump, wlMove, wlEat}

public struct Whale
{
  private WhaleValues whaleValue;

  private static Whale staticWhaleValue;

	public static implicit operator Whale (WhaleValues theWhaleValue)
	{
		 staticWhaleValue.whaleValue = theWhaleValue;

		 return staticWhaleValue;
	}

	public override string ToString()
	{
	   return whaleValue.ToString();
	}
}

class CMain
{
	static void Main()
	{
	 Whale w1 = WhaleValues.wlJump;
	 Whale w2 = WhaleValues.wlEat;

	 Console.WriteLine(w1);
	}

}

هذا الموضوع مغلق.

مواضيع مشابهة