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

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

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

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

Q&A

解決済

1回答

2134閲覧

C# 別ソースファイルのstaticクラスのstatic関数を呼び出す方法が知りたい。

退会済みユーザー

退会済みユーザー

総合スコア0

C#

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

0グッド

0クリップ

投稿2022/05/18 08:46

提示コードですが下記のForm1.csの上記のFunction.Init();が以下のエラーのようなエラーが出てしまい。実行できません。なぜでしょうか?
staticクラスはインスタンスを生成しないで利用でき、C#の場合は#include のようなものは存在しないのでそのまま別のソースファイルのクラスがそのまま使えると調べたのですが原因がわかりません。

イメージ説明

エラー
重大度レベル コード 説明 プロジェクト ファイル 行 抑制状態 エラー IDE1007 名前 'Function.Init' は、現在のコンテキストに存在しません。 YoutubeDownloader C:\Users\yw325\Desktop\YoutubeDownloader\YoutubeDownloader\Form1.cs 15 アクティブ

Function.cs

cs

1using System; 2using System.Collections.Generic; 3using System.Linq; 4using System.Text; 5using System.Threading.Tasks; 6using System.Diagnostics; 7using System; 8using System.IO; 9 10namespace YoutubeDownloader 11{ 12 static class Function 13 { 14 private static Process pro = new Process(); 15 16 /* ########################### 初期化 ###########################*/ 17 static public void Init() 18 { 19 20 pro.StartInfo.FileName = "youtube-dl"; 21 pro.StartInfo.RedirectStandardOutput = true; 22 pro.StartInfo.RedirectStandardError = true; 23 pro.StartInfo.CreateNoWindow = true; // コンソール・ウィンドウを開かない 24 pro.StartInfo.UseShellExecute = false; // シェル機能を使用しない 25 26 } 27 28 /* ########################### URLからデータ取得 ###########################*/ 29 static public Data GetData(String? url) 30 { 31 Data data = new Data(); 32 33 pro.StartInfo.Arguments = " --get-id " + url; 34 pro.Start(); 35 pro.WaitForExit(); 36 37 string result = pro.StandardOutput.ReadToEnd(); 38 if (result == "") 39 { 40 MessageBox.Show("URL ERROR", "", MessageBoxButtons.OK, MessageBoxIcon.Error); 41 data.id = null; 42 43 return data; 44 } 45 else 46 { 47 data.id = result; 48 49 return data; 50 } 51 } 52 53 54 } 55} 56
Form1.cs

cs

1namespace YoutubeDownloader 2{ 3 using System.Diagnostics; 4 using System; 5 using System.IO; 6 using System.Diagnostics; 7 8 //public class 9 10 public partial class Form1 : Form 11 { 12 13 /////////////////////////////////////////////////////////////// 14 15 Function.Init(); 16 /////////////////////////////////////////////////////////////// 17 private Process pro = new Process(); 18 19 20 //List<Data> dataList = new List<Data>(); 21 22 23 public void AddList(String? str) 24 { 25 26 } 27 28 29 String setURLString = "Set URL"; 30 String setStopString = "Stop Download"; 31 String getNowURLString = "Now Loading"; 32 String selectFormatString = "Select Format"; 33 String nowSelectString = "Select SaveFolder"; 34 String nowSaveFolderString = " Now Download"; 35 36 //FolderBrowserDialog folderBrowser = new FolderBrowserDialog(); 37 38 39 40 41 bool isDownLoad = false; 42 bool isSetURL = false; 43 String? initFileName = null; 44 String? fileName = null; 45 46 String? url = null; 47 String? format = null; 48 String? savePath = null; 49 50 51 //指定した文字以降を削除 52 static public string GetRemoveRight(string str, string removeStr) 53 { 54 int length = str.IndexOf(removeStr); 55 if (length < 0) 56 { 57 return str; 58 } 59 60 return str.Substring(0, length); 61 } 62 63 64 //ダウンロード 65 private void DownLoad() 66 { 67 SetFileName(); //ファイル名を設定 68 69 fileName = fileName.Replace("\r", "").Replace("\n", ""); //改行を削除 70 //pro.StartInfo.Arguments = " -o " + "\""+fileName + "\" " + url + " ytsearch:" + format; 71 //pro.Start(); 72 73 Debug.WriteLine(pro.StartInfo.Arguments); 74 75 button.Text = setStopString; //ボタンの表示を停止ボタンに変える 76 isDownLoad = true; //ダウンロード中 77 78 while (pro.HasExited == false) 79 { 80 String? progress = pro.StandardOutput.ReadLine(); 81 82 //プログレスバーを表示 83 if(progress != null) 84 { 85 if (progress.Contains("ETA") == true) 86 { 87 String? p = progress.Replace("[download]", ""); 88 if (p != null) 89 { 90 progress = p; 91 } 92 93 progress = GetRemoveRight(progress, "%"); 94 progress = progress.Replace(" ", ""); 95 96 progressBar1.Value = (int)float.Parse(progress); 97 } 98 99 } 100 } 101 102 pro.WaitForExit(); 103 104 105 //リセット 106 url = null; 107 format = null; 108 textBox_url.Text = null; 109 isDownLoad = false; //ダウンロード終了 110 button.Text = setURLString; //URLを指定する表示に変更 111 112 } 113 114 public Form1() 115 { 116 InitializeComponent(); 117 } 118 119 120 private void SetFileName() 121 { 122 pro.StartInfo.Arguments = " --get-filename " + url; 123 pro.Start(); 124 pro.WaitForExit(); 125 fileName = pro.StandardOutput.ReadToEnd(); 126 127 128 //Debug.WriteLine(results); 129 130 //return results; 131 } 132 133 134 /*############################ 初期化 ############################*/ 135 private void Form1_Load(object sender, EventArgs e) 136 { 137 button.Text = setURLString; //URLを指定する表示に変更 138 139 140 141 142 } 143 144 //ダウンロードボタンをクリック 145 private void Button_Click(object sender, EventArgs e) 146 { 147 148 149 150 151 DownLoad(); 152 153 154 } 155 156 //URL入力欄でEnterキーを押下 157 private void URLText_KeyDown(object sender, KeyEventArgs e) 158 { 159 if(e.KeyCode == Keys.Enter) 160 { 161 162 } 163 } 164 165 166 167 168 169 170 //セーブファイルをボタンをクリック 171 private void PathButton_Click(object sender, EventArgs e) 172 { 173 folderBrowser.ShowDialog(); 174 savePath = folderBrowser.SelectedPath; 175 button.Text = nowSaveFolderString; 176 177 //Debug.WriteLine(savePath); 178 } 179 180 //URLを入力をしたとき 181 private void URLText_TextChanged(object sender, EventArgs e) 182 { 183 url = textBox_url.Text; 184 185 } 186 187 188 189 190 191 } 192}

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

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

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

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

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

fana

2022/05/18 10:15 編集

他言語の話を持ち出すのは本来不適切かとは思うけど,あなたはC++経験者のハズだからあえて以下のように説明申し上げる. 仮にC++だとしたらどうか? 関数(あるいはメソッド)呼び出し記述をそこにそういう形で唐突に書くのはあり得ないですよね. C#だってそこんところは同様.
fana

2022/05/18 10:21 編集

あと,「ソースファイル」という単位が現象に関係している可能性を疑う場合には, 「試しに1個のソースに突っ込んだら状況が変わるのか」みたいなことを質問する前にまずは自分で試すべきでしょうな. そうすれば「別ソースファイルがどうの」という余計なノイズを入れ込まない形の質問を書けたハズですぞ.
guest

回答1

0

ベストアンサー

static class Function

publicつけないとほかから見えません


BAついてしまったので追記

それじゃなく、実行文書く場所の問題。
関数の中で実行させよう

public Form1()
か、
private void Form1_Load(object sender, EventArgs e)
の関数の中に移動させよう。
そしてできれば、Function という名前を変えてやればベストです
#他とその名前かぶってます

そして、

YoutubeDownloader.Function.Init();
にしようってはなしやねw

これも。

投稿2022/05/18 08:49

編集2022/05/18 11:27
y_waiwai

総合スコア87774

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

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

Zuishin

2022/05/18 08:54

見えます。問題はそこではありません。
退会済みユーザー

退会済みユーザー

2022/05/18 08:57

なるほど質問ですが以下のよにしましたがエラー解消されません。 public static class Function static public class Function 両方試した。
y_waiwai

2022/05/18 09:18

YoutubeDownloader.Function.Init(); にしようってはなしやねw
Zuishin

2022/05/18 09:24

全然違います。名前空間の問題でもありません。
Zuishin

2022/05/18 09:25

C# を知らないのに知ったかぶりするなと、他の回答者たちにも何度も注意されているでしょう。
y_waiwai

2022/05/18 09:29

ああ、なーるほどw #他の人に華を持たせますね
Zuishin

2022/05/18 09:31

では代わりに public の説明をしてみてください。
y_waiwai

2022/05/18 09:32

めんどくさいのでパスw #説明する義理もないですわな
Zuishin

2022/05/18 09:43 編集

すぐ知ったかぶりをする。 こんな回答と、その後の突拍子もないやり取りをするところから public の意味を知らないのは明らかなので、ここで言うべきは「めんどくさい」「説明をする義理もない」ではありません。 それは説明できる人のセリフです。
y_waiwai

2022/05/18 09:44

はいはい、よかったですねw
Zuishin

2022/05/18 09:45

良くはありませんね。高速で嘘を撒き散らしていくのは迷惑なのでやめてほしいと思います。
退会済みユーザー

退会済みユーザー

2022/05/18 09:47

失礼します。こうやったのですが以下のエラーが出ます。 YoutubeDownloader.Function.Init(); Error 名前 'YoutubeDownloader.Function.Init' は、現在のコンテキストに存在しません。 YoutubeDownloader
Zuishin

2022/05/18 09:48

当たり前。
退会済みユーザー

退会済みユーザー

2022/05/18 09:52

static public class Functionにもしっかりとpublic を記述しています。これはどうやって解消するのでしょうか?
y_waiwai

2022/05/18 09:53

それじゃなく、実行文書く場所の問題。 関数の中で実行させよう
y_waiwai

2022/05/18 09:55

質問くんにまで煽らないようにw>Zuishin
Zuishin

2022/05/18 09:59

煽ってないでしょう。あなたの嘘に騙された質問くんがかわいそうな目に遭ってるというだけです。 私はそれでうまくいかないということを既に書いていました。 ではうまくいかないのは当たり前じゃないですか。
Zuishin

2022/05/18 10:01

まあこの質問くんは非推奨な質問を繰り返し、回答をもらって質問を削除するような質問くんなので、かわいそうな目に遭っても同情はしませんが。
Zuishin

2022/05/18 10:01

アカウントも確か 3 つめだったと思います。もっとあるかもしれません。
y_waiwai

2022/05/18 10:03

public Form1() か、 private void Form1_Load(object sender, EventArgs e) の関数の中に移動させよう。 そしてできれば、Function という名前を変えてやればベストです #他とその名前かぶってます
Zuishin

2022/05/18 10:04

やれやれ。ここまでヒント出してやっとわかったか。
y_waiwai

2022/05/18 10:06

オレならなんぼでも相手してさしあげますので、哀れな質問くんはほっておきましょうよ こじらせすぎですぜw>Zuishin
Zuishin

2022/05/18 10:07

あなたのなかではそうなんでしょうね。
Zuishin

2022/05/18 10:08

ちょっとあれなメガネをかけると、まっすぐなものが曲がって見えるそうです。 迷惑行為を控えてもらえるとありがたいです。
Zuishin

2022/05/18 10:12

で、アカウントいくつめでしたっけ? 3 つまでは覚えています。
y_waiwai

2022/05/18 10:12

はいはい。 おまえのなかではそーなんだろーな こうですか?w
Zuishin

2022/05/18 10:13

こじらせてるなあ。
y_waiwai

2022/05/18 10:13

こじらせてるねえw
Zuishin

2022/05/18 10:14

私なら相手してあげますから、嘘をばらまきまくって初心者を苛める遊びをやめてあげてください。
y_waiwai

2022/05/18 10:21

えーと、わたしの言うことをあなたは聞く気がない、とおなじように、あなたの言うことは私は聞く気がありません。 #ってよりもろくに読んでない まあ、がんばってくださいw
fana

2022/05/18 10:26

おおっと, > 実行文書く場所の問題 っていう話が既出だったんですね. (→回答を修正するという形を取られてはどうでしょうか)
Zuishin

2022/05/18 10:29

あなたが数行以上読めないのは知っています。
y_waiwai

2022/05/18 10:29

さすがにこのスレッド?を全部読めというのは酷なんで、回答なかったら後でまとめとく所存ではあります #回答してくださるのならどうぞどうぞ
y_waiwai

2022/05/18 10:30

できれば1行、長くても2行でまとめてくだされば一瞥だけで把握できますのでよろしくおねがいいたします
fana

2022/05/18 10:31

(問題要因としての正否はともかくとして,アクセス修飾子を省略した場合の話とかが出てきたなら,質問者側も「言われたとおりに試したがダメです」とほざくじゃなくて,それについて自身で調べるなりするべきではあるまいか.)
Zuishin

2022/05/18 10:31

fana さん、回答してください。さすがにこれがベストアンサーではみっともなさ過ぎます。
fana

2022/05/18 10:37 編集

この回答へのコメントで{回答が正しくないこと,正しい話}の両者が出てきているなら,それを受けてこの回答が修正されるのが本来の姿であろう,と考えます. (加えて個人的な思想を述べるなら,その修正を受けて,低評価も取り下げられるべき) あと,既出だと知る前にうっかり「質問への追記・修正の依頼」に書いちゃってますから,それを受けて「自己解決」という形になるのでも良いのではないかな,と.
y_waiwai

2022/05/18 10:37

しかし、1行の回答でこれだけ話が膨らむというのはさすがにZuishin御大の力量というほかあるまいw さすがだなあ(棒
Zuishin

2022/05/18 10:58

さすがにどこにも共通点のない全く違う回答からの修正はノーカンでいいと思いますが、まあ本人がこれだけたくさんのヒントを得ていまだ修正もできずベストアンサーを貰って喜ぶのであれば、それでも別にいいでしょう。 質問者も質問者なので、アンポンタンな回答がベストアンサーも、困るのはそれを後から見た人だけですね。
y_waiwai

2022/05/18 11:04

回答もしてないやつがいくら吹き上がったところで関わり合いない話ですわな 文句があるなら、それを叩き潰すほどの素晴らしい回答をすればいいだけですぜw
Zuishin

2022/05/18 11:10 編集

ああ、叩き潰すほどの回答ができないと思ってイキってるのか。 このいくつものヒントを誰に貰ったかも忘れてドヤ顔してるのはなかなか面白い。
y_waiwai

2022/05/18 11:11

はい。がんばってくださいw
Zuishin

2022/05/18 11:16

あなたはもう頑張らず休み休み書いた方がいいですね。
y_waiwai

2022/05/18 11:21

はい。激励のお言葉、ありがとうございます 回答もしないやつに負けないようガンガン書いていこうかと思いますw
Zuishin

2022/05/18 11:23

まさか一行も読めないとは。
y_waiwai

2022/05/18 11:28

読む気もないんですよ。わかってくださいw
Zuishin

2022/05/18 11:33 編集

追記してもまだポンコツですねえ。名前空間の理解が一欠片もないのがよくわかります。 読む気もないのに頑張って読んで全部反応してご苦労様です。
Zuishin

2022/05/18 11:38

この回答に書いてあるのは、家族を下の名前で呼ぶのは間違いだからフルネームで呼べと言っているような、トンチンカンなものです。
y_waiwai

2022/05/18 12:30

> 回答もしてないやつがいくら吹き上がったところで関わり合いない話ですわなw
Zuishin

2022/05/18 12:40 編集

関わりあいがなく、ましてや読めないのにいちいち反応ご苦労様です。ベストアンサーにこれだけ低評価がついてる理由を書いておかないと、見た人がびっくりするでしょう。
y_waiwai

2022/05/18 12:42

> 回答もしてないやつがいくら吹き上がったところで関わり合いない話ですわなw
Zuishin

2022/05/18 12:44

関わり合いがないはずで、ましてや読めないのに、いちいち反応ご苦労様です。 参考までに、ゼークトの組織論を引用しておきます。 > 軍人には四つのタイプがある > 有能な怠け者は指揮官にせよ > 有能な働き者は参謀に向いている > 無能な怠け者は連絡将校か下級兵士が務まる > 無能な働き者は銃殺するしかない 大事なところをもう一度。 > 無能な働き者は銃殺するしかない
y_waiwai

2022/05/18 12:46

> 回答もしてないやつがいくら吹き上がったところで関わり合いない話ですわなw
Zuishin

2022/05/18 12:49

嘘ばかり書き散らして初心者を騙して遊ぶような荒らし行為はお控えください。 > 無能な働き者は銃殺するしかない
fana

2022/05/19 01:09

"Function" という名前が他とかぶっている,とのことですが,具体的に何とかぶっているのでしょうか?
Zuishin

2022/05/19 15:41

返事がない。ただの屍のようだ。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問