C ++ إلى C # ترقية

كيف يمكنني نقل هذا الرمز (c ++) إلى c #؟

template 
class State {
public:
    virtual void Enter(entity_type*) = 0;
    virtual void Execute(entity_type*) = 0;
    virtual void Exit(entity_type*) = 0;
    virtual ~State() { }
};
0
أنا أتبع التعليمات البرمجية في كتاب برمجة IA. نص جيد ولكن مربكة جدا في بعض الأحيان. يتم تفسير جزء من الشفرة بعد عدة صفحات.
وأضاف المؤلف Pasquale Sada, مصدر
أوصي بقراءة برنامج تعليمي أو كتاب لفهم أساسيات C ++ ، مما يجعلك تفهم الرمز بنفسك. من المؤكد أن ترجمة أجزاء من الكود لن تجعلك بعيدًا ، لأنك قد تفتقد النية. أيضا ، كم C# هل تعلم؟ هل تفهم متى ولماذا تستخدم واجهة IDisposable ؟ هل تعرف الفرق بين أنواع القيم والمراجع (بحيث إذا ترجم أحدهم إلى أحدهم ، فستكون قادرًا على إعادة تعيينه إلى الآخر إذا احتاجت بقية الشفرة إلى ذلك؟
وأضاف المؤلف David Rodríguez - dribeas, مصدر
وبالتالي ، بعد الاطلاع على العديد من الأسئلة والافتراضات الواردة في الإجابات أدناه ، ربما يمكنك أن تعطينا بعض التلميحات حول ما قد يكون entity_type ، وكيف يجب أن تكون واجهة State تعمل على ذلك؟ أيضاً ، هل الحالة معروضة كليًا هنا (على سبيل المثال ، إنها فئة تجريدية خالصة) أم أنها تحتوي على متغيرات أو طرق عضوية محددة لم تظهر؟
وأضاف المؤلف Rook, مصدر
@ lollancf37 هذا هو ما هي الأصوات. التصويت على الإجابات التي تعتقد أنها جيدة ، ومن المرجح أن يلقي الطالب نظرة عليها. ترك مثل هذه التعليقات لا يساعد كثيرا.
وأضاف المؤلف Magnus Hoff, مصدر
Magnus هوف فعلتها upvote لهم. أوافق على عدم الرد على السؤال ، ولهذا السبب علّقت عليه بدلاً من إنشاء إجابة جديدة. ومع ذلك أنت على حق ، سوف أتجنب ذلك في المستقبل. شكر.
وأضاف المؤلف lollancf37, مصدر

4 إجابة

public abstract class State
    {
        public abstract void Enter(entity_type obj);
        public abstract void Execute(entity_type obj);
        public abstract void Exit(entity_type obj);
    }

يبدو أن هذا العمل: د

0
وأضاف
هذا صحيح ، أنا أعطيها محاولة: د
وأضاف المؤلف Pasquale Sada, مصدر
من المؤكد أن استخدام الواجهة هو الكنسي الشيء الصافي للقيام به هنا. تذكر أن الصف يمكنه تنفيذ العديد من الواجهات التي تريدها/تحتاج إليها ، ولكن يمكن أن ترث من فئة أساسية واحدة ، أو مجرد ملخص.
وأضاف المؤلف Rook, مصدر
هل لا يعمل حل interface ؟ هناك أسباب تجعل أعلى إجابة صوتية interface . ربما لديك قيود إضافية لم تذكرها؟ على أي حال ، قد لا ترغب في نشر إجابتك الخاصة ، بل تقبل الإجابة التي ساعدت أكثر.
وأضاف المؤلف Magnus Hoff, مصدر

بعض الشيء من هذا القبيل:

interface State : IDisposable
{
    void Enter(T t);
    void Execute(T t);
    void Exit(T t);
}
0
وأضاف

يمكنك أن تكتب هكذا

abstract class State : IDisposable where T : EntityType
{
    public abstract void Enter(T t);
    public abstract void Execute(T t);
    public abstract void Exit(T t);

    public abstract void Dispose();
}

أصلح فئة T to EntityType.

0
وأضاف
هل هذا حتى تجميع؟
وأضاف المؤلف Indy9000, مصدر
فعلت ولا!
وأضاف المؤلف Indy9000, مصدر
Indeera ، جرب إذا كان لديك شك.
وأضاف المؤلف Sudhakar B, مصدر
حاولIndeera الآن. يجب عليك إنشاء فئة EntityType واحدة
وأضاف المؤلف Sudhakar B, مصدر

إذا افترضنا أن هذه هي فئة أساسية خالصة تمامًا ، فهي ما تبدو عليه:

interface State
{
    void Enter(T arg);
    void Execute(T arg);
    void Exit(T arg);
};

الحجة بالضبط تمرير الاتفاقية أمر محرج رغم ذلك. دون معرفة بالضبط ما تريد القيام به من الصعب القول بالضبط ما يجب عليك القيام به في C #. ربما ، void FunctionName (المرجع T arg) قد يكون أكثر ملاءمة.

0
وأضاف
ربما تؤهل الواجهة مع حيث T: class ؟
وأضاف المؤلف StuartLC, مصدر
ربما ، ولكن ذلك يفرض مستوى إضافي من التقييد والتفاصيل غير الموجودة في سؤال البروتوكول الاختياري. يمكن أن تعمل شفرة المثال باستخدام نوع متكامل بسيط كمؤشر إلى بعض datastructure أخرى ، على سبيل المثال. لقد حاولت القيام بحد أدنى من الافتراضات.
وأضاف المؤلف Rook, مصدر