فئة مجردة, المنشئات Co
-
03-07-2019 - |
سؤال
حسنا, أنا أحاول إعادة استخدام جزء من التعليمات البرمجية C#.انها فئة مجردة مع UDP الخادم الذي يمكن أن ينظر إليه هنا:
http://clutch-inc.com/blog/?p=4
لقد خلق فئة مشتقة مثل هذا:
public class TheServer : UDPServer
{
protected override void PacketReceived(UDPPacketBuffer buffer)
{
}
protected override void PacketSent(UDPPacketBuffer buffer, int bytesSent)
{
}
}
و في بلدي التطبيق لقد خلق مثيل من فئة مشتقة مثل هذا:
TheServer serv = new TheServer(20501);
serv.Start();
ولكن لدي أخطاء و أنا لا أفهم حقا لماذا.الرجاء المساعدة.
- 'TheProject.الملقم' لا تحتوي على منشئ أن يأخذ '1' الحجج
- 'TheProject.UDPServer.Start()' هو لا يمكن الوصول إليها بسبب الحماية المستوى
- 'TheProject.UDPServer' لا لا تحتوي على منشئ أن يأخذ '0' الحجج
المحلول
منشئات لا تحصل الموروثة في C#.سيكون لديك سلسلة يدويا:
public TheServer(int port)
: base(port)
{
}
أيضا, إذا بدء محمي, سيكون لديك لخلق نوع من الطريقة العامة أن تدعو عليه:
public void StartServer()
{
Start();
}
نصائح أخرى
الخاص بك فئة مشتقة يحتاج إلى إضافة واحد المعلمة منشئ, وتفويض الأمر إلى الفئة الأساسية:
public TheServer(int port) : base(port) {}
أيضا ، Start
طريقة محمي.سوف تحتاج الخاص بك:
public void StartMe(){base.Start();}
هذه الأخطاء فعلا واضحة إلى حد ما أسباب:
لم يعرف منشئ في فئة مشتقة (
TheServer
).منشئات (على عكس أساليب بالطبع) لا أوتوماتيكيا ، لذلك عليك أن تعلن المنشئات التي تطابق اليك منها في الفئة الأصل سلسلة لهم معا باستخدام شيء من هذا القبيل:public TheServer(int port) : base(port) { // Your code here. } public TheServer() : base() { // Your code here. }
على
Start
طريقة أعلنprotected
في قاعدة (UDPServer
) فئة.إما تغيير الوصول التعديل في قاعدة الطبقةpublic
, أو معرفة طريقة استدعاء الأسلوب من فئة مشتقة عند الحاجة (وهذا الأخير يجب أن يكون المقصود من كاتبUDPServer
).- نفس السبب 1 ، باستثناء هذا يشير إلى الافتراضي (parameterless) منشئ.
على أمل أن يساعد.
أنت لم تحدد الملقم منشئ مع حجة واحدة بحيث لا يمكن استدعاء الملقم(20501);أنت لم تحدد صفر الحجج منشئ UDPServer ولكن هل يعرف أحد مع أحد حجة.لديك طريقتين في الملقم المحمية ، وبالتالي الخطأ في رقم 2.
- و 3.
إضافة منشئ إلى الملقم الذي يستدعي قاعدة منشئ (من UDPServer);شيء من هذا القبيل:
public TheServer(int port) : base(port) {}
2 تحقق من طريقة البدء على UDPServer:محمي.وهذا يعني أنه فقط فرعية من فئة يمكن أن يطلق عليه.
public class TheServer
{
public TheServer():base(port) {
}
}
var myServer = new TheServer(1337).Brings().All().The().Boys().to().The().Yard()
سوف تحتاج إلى إضافة رمز إلى فئة مجردة ولكن في كامل تخمين ،
لديك ctor
في UDPServer الفئة التي لم تنفذ في الملقم فئة...كنت بحاجة إلى شيء من هذا القبيل...
public TheServer(int port) : base(port)
{
... specifics
}
و أيضا كنت قد نسيت أن تجاوز البداية (طريقة) في الملقم فئة ولكن لها وضع خاص في الطبقة الأساسية...الأساسية الخاصة بك فئة يجب أن يكون شيء من هذا القبيل...
//In UDPServer
protected void Start()
{
//Code to start
}
//In TheServer
protected void StartTheServer()
{
base.Start();
}
و ما يستحق أنصح باستخدام:
UDPServer serv = new TheServer(20501);
serv.start();
أو ربما حتى أكثر من عام ، الخادم.يعتمد على ما هي الطرق التي تحتاج إلى الاتصال على سيرف.