質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Q&A

解決済

2回答

1563閲覧

引数がdoubleのメソッドにstringを渡したい

mercredi

総合スコア26

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

0グッド

1クリップ

投稿2017/03/15 04:30

###前提
ClassLibraryを利用してQueueクラスを作っているのですが、ClassLibraryにある引数doubleのメソッドを使って、Queueクラスでstring要素のQueueを作成しないといけません。

###ListNodeクラス(ClassLibrary)

public class ListNode { public double Data { get; private set; } public ListNode Next { get; set; } public ListNode(double dataValue) : this(dataValue, null) { } public ListNode(double dataValue, ListNode nextNode) { Data = dataValue; Next = nextNode; } }

上記のように、ListNodeクラスでDataプロパティのデータタイプをdoubleで設定してあります。Dataプロパティのデータタイプは変えられないことになっております。

###Listクラス(ClassLibrary)

public class List { private ListNode firstNode; private ListNode lastNode; private string name; private int counter; public ListNode FirstNode { get { return firstNode; } set { firstNode = value; } } public List(string listName) { name = listName; firstNode = lastNode = null; counter = 0; } public List() : this("list") { } public void InsertAtFront(double insertItem) { if (IsEmpty()) { firstNode = lastNode = new ListNode(insertItem); } else { firstNode = new ListNode(insertItem, firstNode); } counter++; } public void InsertAtBack(double insertItem) { if (IsEmpty()) { firstNode = lastNode = new ListNode(insertItem); } else { lastNode = lastNode.Next = new ListNode(insertItem); } counter++; } public double RemoveFromFront() { if (IsEmpty()) { throw new EmptyListException(name); } double removeItem = firstNode.Data; // retrieve data // reset firstNode and lastNode references if (firstNode == lastNode) { firstNode = lastNode = null; } else { firstNode = firstNode.Next; } counter--; return removeItem; // return removed data } public double RemoveFromBack() { if (IsEmpty()) { throw new EmptyListException(name); } double removeItem = lastNode.Data; // retrieve data // reset firstNode and lastNode references if (firstNode == lastNode) { firstNode = lastNode = null; } else { ListNode current = firstNode; // loop while current.Next is not lastNode while (current.Next != lastNode) { current = current.Next; // move to next node } // current is new lastNode lastNode = current; current.Next = null; } counter--; return removeItem; // return removed data }

上記のようにInsertAtFront/InsertAtBackメソッドの引数も必然的にdoubleです。

このClassLibraryを用いて作ったQueueクラスの雛形が、、

class QueueInheritanceLibrary:List { public QueueInheritanceLibrary() : base("queue") { } public void Enqueue(double dataValue) { InsertAtBack(dataValue); } public double Dequeue() { return RemoveFromFront(); } }

上記のクラスなんですが、このEnqueueメソッドとDequeueメソッドに渡す値と戻り値をstringにしないといけないんですが、何か方法はありますでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ozwk

2017/03/15 04:46

標準のQueue<T>じゃダメなんですか?
guest

回答2

0

こんにちは。

その要件を継承によって実現するのは不可能です。
継承は諦めて新しいクラスを作成してください。

質問の内容と要件の制約がかなりあいまいなので、このような回答しかできません(文字通り受け取ると、「要件が矛盾しており不可能」としか言えないのです)。
可能なら、もう少し質問に詳しい情報を追記していただけると助かります。


小話です。継承は「雛形」ではありません。「継承する」というのは、具体的に表現すると、QueueInheritanceLibraryというのがClassLibraryのList「としても使える」という意味になります。引数の型を変えるというのは、この概念と矛盾しています。
どちらかと言うと、質問者が求めている「雛形」に対応するのは「ジェネリクス」になる気がします。といっても、質問内容からかけ離れるのでここでは書きません。気になったら調べてみて下さい。

投稿2017/03/15 04:47

編集2017/03/15 04:50
tamoto

総合スコア4105

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mercredi

2017/03/15 05:11

こんにちは 解答ありがとうございます。要件の制約があいまいですみません、以後気を付けます。 ひな型についてですが、英語でプログラミングを習っているため(blueprintと習いました)日本語で何と言ってよいのかわかりませんでした、すみません。 GenericとOverloadはやってみたのですが、やはりルートクラスのDataプロパティがdoubleで設定されてあるので無理でした。
guest

0

ベストアンサー

こんにちは。

インターフェース用にメソッドを追加すれば良いと思います。
例えば下記です。(コンパイルしてないのでエラーが出たらすいません。)

C#

1public void EnqueueString(string dataValue) 2{ 3 Enqueue(Double.Parse(dataValue)); 4} 5 6public string DequeueString() 7{ 8 return Dequeue().ToString(); 9}

上記のように、ListNodeクラスでDataプロパティのデータタイプをdoubleで設定してあります。Dataプロパティのデータタイプは変えられないことになっております。

この条件があるので、doubleへ変換できないような文字列をQueueInheritanceLibraryに入れることはできません。

投稿2017/03/15 04:44

Chironian

総合スコア23272

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mercredi

2017/03/15 05:11

ありがとうございます。 エラーは出ませんでしたので、この方法でやってみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問