עבור לתוכן

C#| בעיה ביצירת פעולה חיצונית./שימוש בה.

Featured Replies

פורסם

בתור התחלה זו המחלקה STACK המגדירה מחסנית


public class Stack<T>
{
private Node<T> first;
public Stack()
{
this.first = null;
}
public bool IsEmpty()
{
return this.first == null;
}
public void Push(T x)
{
this.first = new Node<T>(x, this.first);
}
public T Pop()
{
T x = this.first.GetInfo();
this.first = this.first.Getnext();
return x;
}
public T Top()
{
return this.first.GetInfo();
}
public override string ToString()
{
string str = "[";
Node<T> pos = this.first;
while (pos != null)
{
str = str + pos.GetInfo().ToString();
if (pos.Getnext() != null)
str = str + ",";
pos = pos.Getnext();
}
str = str + "]";
return str;


}
}

במחלקה זו יש רת התכונה FIRST מטיפוס המחלקה NODE(אם תרצו אני אוסיף אותה)

עכשיו בתרגיל שלי אני צריך להוסיף פעולה חיצונית למחלקה הזאת. הפעולה מקבלת מחסנית של מספרים ומחזירה את מספר האיברים במחסנית מסלי לשנות אותה. אני צריך להשתמש ברקורסיה ואסור להשתמש במחסנית עזר.

אז כתבתי את הפעולה הזאת

using System;

using System.Linq;
using System.Text;

namespace ClassLibrary1
{
public class Class1
{
public int Size(Stack<int> s)
{
if (s.IsEmpty())
return 0;
else
{
int x = s.Pop();
int y = 1 + Size(s);
s.Push(x);
return y;
}
}

}
}

וכמובן שהוספתי הפניה למחלקה STACK...

אני לא יודע את הפעולה הזאת נכונה.. ולכן כתבתי את התוכנית הזאת אבל אני מקבל EROR שאומר "the name claas1 doesnot exist in the current context"]

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
Stack<int> s = new Stack<int>();
s.Push(5);
s.Push(3);
int x = Class1.Size(s);
Console.WriteLine(x);
}
}
}

אני לא יודע איך לפתור את הבעיה. אני מקווה שהבנתם ומצטער על החפירות...

נ.ב. את ממשקי המחלקות ניתן למצוא בעמודים 200 ,225

פורסם

א. לא עשית את Size סטטית.

ב. ה-main שלך והמחלקה Class1 לא יושבים באותו namespace. אתה צריך לרשום את שם המחלקה כולל ה-namespace, או להשתמש ב-using.

ג. אם Class1 וה-main לא יושבים באותו פרוייקט, תוודא שעשית reference מאחד לשני.

ד. ב-main עשית using System.Collections.Generic, מה שאומר שה-Stack שיצרת הוא הטיפוס שמוגדר בדוטנט, ולא ה-Stack שאתה יצרת...

פורסם
  • מחבר

א. לא עשית את Size סטטית.תיקנתי

ב. ה-main שלך והמחלקה Class1 לא יושבים באותו namespace. אתה צריך לרשום את שם המחלקה כולל ה-namespace, או להשתמש ב-using.ככה? int x = ClassLibrary1.Class1.Size(s); או לשנות ב-MAIN

ג. אם Class1 וה-main לא יושבים באותו פרוייקט, תוודא שעשית reference מאחד לשני.עשיתי את הNAMESPACE עצמו??

ד. ב-main עשית using System.Collections.Generic, מה שאומר שה-Stack שיצרת הוא הטיפוס שמוגדר בדוטנט, ולא ה-Stack שאתה יצרת...לא ממש הבנתי , בכל מקרה אם רני מוחק את זה אז מתווספות 2 טעויות...

פורסם

ב. בדיוק ככה, או שבקובץ של ה-main שים using ClassLibrary1, שניהם סבבה.

ג. ה-namespace רק אומר לו להכיר את השם, אבל הוא עדיין צריך לדעת באיזה אסמבלי המחלקה יושבת. אם המחלקה יושבת באסמבלי (יענו, פרוייקט) נפרד מה-main, אז הוא צריך להכיר אותו באמצעות add reference.

ד. אז תתקן את הבעיות (אני אנחש שחסר לך ה-reference לפרויקט). איך שהקוד שלך כתוב כרגע, אתה בכלל לא משתמש במחלקה Stack שהגדרת בעצמך, אלא במחלקה Stack המובנית בתוך דוטנט.

פורסם
  • מחבר

תודה , זה הסתדר :xyxthumbs: .

יש לי עוד כמה שאלות:1) הבנתי אם המחלקה יושבת בפרוייקט אחר אני צריך להוסיף הפניה, אבל לא ממש הבנתי מתי אני אמור להוסיף using blabla

כי אני זוכר שהיו לי תרגילים שבהם לא הוספתי את זה וזה בכל זאת עבד(אולי בגלל שזה היה באותו פרוייקט?).

2)אם נגיד יש לי את המחלקה X ויש לי גם את המחלקה Y (לא באותו פרוייקט) והפעולות של המחלקה Y משתמשות במחלקה X, ואני כותב תוכנית שמשתמשת במחלקה Y ומוסיף הפניה לY, אני צריך להוסיף הפניה גם למחלקה X?

תודה על העזרה!

פורסם

1. צריך using (או להשתמש בשם המלא של המחלקה) כשהמחלקות לא יושבות באותו namespace (לא משנה אם הן באותו פרוייקט או לא).

2. לא.

ארכיון

דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.

דיונים חדשים