soheil moonesi
soheil moonesi
خواندن ۲ دقیقه·۹ ماه پیش

C# Object

مرجع: سایت

خوده آبجکت یک سری متد داره که ما میتونیم ازشون استفاده کنیم:

این رو به عنوان یه توضیح ابتدایی گذاشتیم و جلوتر میایم یکی یکی بررسیشون میکنیم.

There are two types in C# i.e Reference types and Value types. By using System.ValueType class, the value types inherit the object class implicitly. System.ValueType class overrides the virtual methods from Object Class with more appropriate implementations for value types. In other programming languages, the built-in types like int, double, float, etc. do not have any object-oriented properties. To simulate the object-oriented behavior for built-in types, they must be explicitly wrapped into the objects. But in C#, we have no need for such wrapping due to the presence of value types that are inherited from the System.ValueType that is further inherited from System.Object. So in C#, value types also work similarly to reference types. Reference types directly or indirectly inherit the object class by using other reference types.

تمام شی ها در آخر از کلاس Object ارث بری میکنند.

public class Object { public Object(); public static bool equals(Object? objA,Object? objB); public static bool RefrenceEquals(Object? objA,Object? objB); public virtual bool Equals(object? obj); public type GetType(); public virtual string?ToString(); protected Object MemberWiseClone(); }

به این مثال دقت کنید:

int i = 5; string Name='soheil' Car car = new Car(); Console.WriteLine(i); Console.WriteLine(Name); Console.WriteLine(car);

خوب اینجا دقت کنید ، اتفاقی که افتاده اینه که برای متد WriteLine از قبل overload های مختلفی در نظر گرفته شده ، یعنی وقتی که string میفرستیم داخلش متد WriteLine که آرگومان استرینگ میگیره کال میشه و وقتی که تایپ ورودی از نوع کلاس (آبجکت) باشه متد با آرگومان ورودی آبجکت کال میشه.

نکته: زمانی که این آرگومان ها داخل متد WriteLine میشن، به طور اتومات از تابع ToString استفاده میشه.

خروجی کد بالا به این شکل هستش:

5 soheil project1.Car

public virtual string?ToString();


از این تابع بالا استفاده شده و همنطور که میبینید چون virtual تعریف شده پس ما میتونیم override کنیم روش.

قبل از این که override اش کنیم باید بگیم که عملکرد معمولی این تابع به این صورته که وقتی که آبجکت رو واردش میکنیم میاد و namespace و بعد اسم اون آبجکت رو در خروجی چاپ میکنه : project1.Car حالا ما میخوایم override کنیم که عملکردش رو تغییر بدیم به اون چیزی که خودمون میخوایم.

حالا میایم داخل کلاس Car این overriding رو به این شکل انجام میدیم :

namespace Project1 { public class Car { public string Name{ get; set; } public override string ToString() { return $' car name is : {Name} ' } } }

حالا به این شکل اول به طور مثال به Name مقدار میدیم و بعد نتیجه رو میبینیم :

Car car = new Car(); car.Name= 'benz' Console.WriteLine(car);

حالا در خروجی کلمه benz چاپ میشه .






objectValue Types
C# enthusiast
شاید از این پست‌ها خوشتان بیاید