الملكية نفسها، وأنواع مختلفة
-
03-07-2019 - |
سؤال
ودعونا نقول لديك فئة مع خاصية أوري. هل هناك أي طريقة للحصول على تلك الممتلكات لقبول كلا قيمة سلسلة ويوري؟ كيف نبني عليه؟
وأود أن تكون قادرة على القيام بشيء ما مثل أحد الخيارات التالية، ولكن لا يتم اعتماد (باستخدام VB، لأنه يتيح لك تحديد نوع في إعلان مجموعة لواحد 2ND):
Class MyClass
Private _link As Uri
'Option 1: overloaded property
Public Property Link1 As Uri
Get
return _link
End Get
Set(ByVal value As Uri)
_link = value
End Set
End Property
Public Property link1 As String
Get
return _link.ToString()
End Get
Set(Byval value As String)
_link = new Uri(value)
End Set
End Property
' Option 2: Overloaded setter
Public Property link2 As Uri
Get
return _link
End Get
Set(Byval value As Uri)
_link = value
End Set
Set(Byval value As String)
_link = new Uri(value)
End Set
End Class
وبالنظر إلى أن تلك ربما لن تكون معتمدة في أي وقت قريب، وإلا كيف كنت تعامل مع هذا؟ أنا أبحث عن شيء أجمل قليلا من مجرد توفير وسيلة .SetLink(string value)
إضافية، وأنا ما زلت على .Net2.0 (على الرغم إذا كانت الإصدارات الأحدث ميزة لطيفة لهذا، أود أن أسمع عن ذلك).
وأستطيع أن أفكر في سيناريوهات أخرى حيث قد ترغب في تقديم هذا النوع من الحمل الزائد: فئة مع عضو SqlConnection التي تمكنك من تعيين إما اتصال جديد أو سلسلة اتصال جديدة، على سبيل المثال
المحلول
وبدلا من ذلك، يمكنك بالطبع التخلي عن الحمولة الزائدة ومجرد اسم الخصائص بشكل مناسب:
Public WriteOnly Property UriString() As String
Set(ByVal value As String)
m_Uri = new Uri(value)
End Set
End Property
وبطبيعة الحال لم يكن لديك لجعل هذا WriteOnly
لكن يبدو مناسبا.
نصائح أخرى
وأعتقد أنك تحتاج فقط لتوفير المرافق
Public Sub SetLink(ByVal value as String)
_link = new Uri(value)
End Sub
لا شيء أجمل متاح، AFAIK.
ودعونا نقول لديك فئة مع خاصية أوري. هل هناك أي طريقة للحصول على تلك الممتلكات لقبول كلا قيمة سلسلة ويوري؟
اقتباس فقرة>ولا لأن هذا يعني وجود اثنين من حاصل التي تختلف فقط في نوع عودتهم وهذا غير مسموح به في .NET.
وأود أن استخدام الأسلوب Uri
وحدها، وربما إنشاء أسلوب convenienec لتعيين الخاصية URI
، نظرا لسلسلة. ومع ذلك، منذ التحول من String
إلى URI
واضح ومباشر، وحتى هذا قد يكون غير ضروري.
وأنت لا يمكن أن يكون خاصية واحدة من هذا القبيل، ولكن هل يمكن إنشاء فندقين وكلاهما التلاعب نفس المجال الأساسي - تماما مثل الطول / العرض / الحجم في Windows Forms