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

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

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

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

解決済

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

samidare_chan
samidare_chan

総合スコア142

C#

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

1回答

-5評価

0クリップ

727閲覧

投稿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

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Diagnostics; using System; using System.IO; namespace YoutubeDownloader { static class Function { private static Process pro = new Process(); /* ########################### 初期化 ###########################*/ static public void Init() { pro.StartInfo.FileName = "youtube-dl"; pro.StartInfo.RedirectStandardOutput = true; pro.StartInfo.RedirectStandardError = true; pro.StartInfo.CreateNoWindow = true; // コンソール・ウィンドウを開かない pro.StartInfo.UseShellExecute = false; // シェル機能を使用しない } /* ########################### URLからデータ取得 ###########################*/ static public Data GetData(String? url) { Data data = new Data(); pro.StartInfo.Arguments = " --get-id " + url; pro.Start(); pro.WaitForExit(); string result = pro.StandardOutput.ReadToEnd(); if (result == "") { MessageBox.Show("URL ERROR", "", MessageBoxButtons.OK, MessageBoxIcon.Error); data.id = null; return data; } else { data.id = result; return data; } } } }
Form1.cs

cs

namespace YoutubeDownloader { using System.Diagnostics; using System; using System.IO; using System.Diagnostics; //public class public partial class Form1 : Form { /////////////////////////////////////////////////////////////// Function.Init(); /////////////////////////////////////////////////////////////// private Process pro = new Process(); //List<Data> dataList = new List<Data>(); public void AddList(String? str) { } String setURLString = "Set URL"; String setStopString = "Stop Download"; String getNowURLString = "Now Loading"; String selectFormatString = "Select Format"; String nowSelectString = "Select SaveFolder"; String nowSaveFolderString = " Now Download"; //FolderBrowserDialog folderBrowser = new FolderBrowserDialog(); bool isDownLoad = false; bool isSetURL = false; String? initFileName = null; String? fileName = null; String? url = null; String? format = null; String? savePath = null; //指定した文字以降を削除 static public string GetRemoveRight(string str, string removeStr) { int length = str.IndexOf(removeStr); if (length < 0) { return str; } return str.Substring(0, length); } //ダウンロード private void DownLoad() { SetFileName(); //ファイル名を設定 fileName = fileName.Replace("\r", "").Replace("\n", ""); //改行を削除 //pro.StartInfo.Arguments = " -o " + "\""+fileName + "\" " + url + " ytsearch:" + format; //pro.Start(); Debug.WriteLine(pro.StartInfo.Arguments); button.Text = setStopString; //ボタンの表示を停止ボタンに変える isDownLoad = true; //ダウンロード中 while (pro.HasExited == false) { String? progress = pro.StandardOutput.ReadLine(); //プログレスバーを表示 if(progress != null) { if (progress.Contains("ETA") == true) { String? p = progress.Replace("[download]", ""); if (p != null) { progress = p; } progress = GetRemoveRight(progress, "%"); progress = progress.Replace(" ", ""); progressBar1.Value = (int)float.Parse(progress); } } } pro.WaitForExit(); //リセット url = null; format = null; textBox_url.Text = null; isDownLoad = false; //ダウンロード終了 button.Text = setURLString; //URLを指定する表示に変更 } public Form1() { InitializeComponent(); } private void SetFileName() { pro.StartInfo.Arguments = " --get-filename " + url; pro.Start(); pro.WaitForExit(); fileName = pro.StandardOutput.ReadToEnd(); //Debug.WriteLine(results); //return results; } /*############################ 初期化 ############################*/ private void Form1_Load(object sender, EventArgs e) { button.Text = setURLString; //URLを指定する表示に変更 } //ダウンロードボタンをクリック private void Button_Click(object sender, EventArgs e) { DownLoad(); } //URL入力欄でEnterキーを押下 private void URLText_KeyDown(object sender, KeyEventArgs e) { if(e.KeyCode == Keys.Enter) { } } //セーブファイルをボタンをクリック private void PathButton_Click(object sender, EventArgs e) { folderBrowser.ShowDialog(); savePath = folderBrowser.SelectedPath; button.Text = nowSaveFolderString; //Debug.WriteLine(savePath); } //URLを入力をしたとき private void URLText_TextChanged(object sender, EventArgs e) { url = textBox_url.Text; } } }

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

fana

2022/05/18 10:15 編集

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

2022/05/18 10:21 編集

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

まだ回答がついていません

会員登録して回答してみよう

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

同じタグがついた質問を見る

C#

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