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

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

ただいまの
回答率

90.98%

  • C#

    5791questions

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

C#のusingディレクティブについて

受付中

回答 3

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 395
退会済みユーザー

退会済みユーザー

C#のusingディレクティブについて質問があります。

C#のListを使用する場合、名前空間の記述が面倒なので「using System.Collections.Generic;」を記述するのですが、
例えば、usingディレクティブを100個くらい(そんなにあるかは知りませんが)記述して、実際には以下のようなクラスを複数ファイル作成した際どのような悪影響があるのでしょうか。

class Hoge
{
    List<string> strList = null;

    public Hoge()
    {
        this.strList = new List<string>();
        this.strList.Add("A");
        this.strList.Add("VVV");
    }

    public void Add(string str)
    {
        this.strList.Add(str);
    }
}

単純に言うと、必要ないusingディレクティブを大量に記述したファイルを複数作った場合どのような
悪影響があるのか知りたいです。
例えば
・処理が遅くなる
・作成されたパッケージファイル(アプリケーションファイル)のサイズがでかくなる
など。

追記
using System.......
以外にも外部から追加したリソースはオリジナルの名前空間があるためそれらを使った場合なども何かわかればお願いします。
例: using UnityEngine; using UnityEditor;

よろしくお願いします。

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

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

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

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

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

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

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

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

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 3

+6

 質問への回答

 Q1.

必要ないusingディレクティブを大量に記述したファイルを複数作った場合
どのような悪影響があるのか知りたいです。

 A1. 

  • 人間がusingディレクティブを見た時の可読性が落ちる。
  • クラス名が重複した場合、名前空間を全て書く必要がある。
  • C#プログラムのファイルファイズが無駄に増える。
    ...等の悪影響が考えられます。

公式ドキュメントの通りusingディレクティブはあくまで人間が楽をするための機能でしかありません。
usingディレクティブに書いているコードが実行されるという事はありません。
よって、実行速度に影響はありません。
また、コンパイル時に不要な物は無視されます。

名前空間で型の使用を許可する場合。
これにより、その名前空間内では型を修飾せずに使用できます。
参考1より引用

 Q2.

using System.......
以外にも外部から追加したリソースはオリジナルの名前空間があるためそれらを使った場合なども何かわか> ればお願いします。
例: using UnityEngine; using UnityEditor;

 A2.

質問の意図が分かりませんでした。
Q1の内容を理解していただければこちらの質問も解決するかと思います

 余談

基本的に無駄なものは無駄なので消した方がいいです。
右クリック→usingの削除と並べ替え

 参考

  1. using ディレクティブ (C# リファレンス)
    https://docs.microsoft.com/ja-jp/dotnet/csharp/language-reference/keywords/using-directive

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/09/11 00:06

    ご回答ありがとうございます。
    とても参考になります。

    キャンセル

+2

以下試してみましたが、アプリケーションのサイズは5120バイトで変わりませんでした(vs2012)
(先頭#は見出しになってしまうので、’を入れています)

ただ、名前が被るので作る時に面倒(イライラ)になると思います。
インテリセンスで入力しても、結局名前空間から指定しないといけないので。

実行速度については...どうでしょう(すみません)。

'#define MUDA

'#if MUDA
using System;
using System.CodeDom.Compiler;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Collections.Specialized;
using System.ComponentModel.Design.Serialization;
using System.Configuration.Assemblies;
using System.Data.Common;
using System.Data.Odbc;
using System.Data.OleDb;
using System.Data.ProviderBase;
using System.Data.Sql;
using System.Data.SqlClient;
using System.Data.SqlTypes;
using System.Deployment.Internal;
using System.Diagnostics.CodeAnalysis;
using System.Diagnostics.Eventing.Reader;
using System.Diagnostics.PerformanceData;
using System.Diagnostics.SymbolStore;
using System.Globalization;
using System.IO.Compression;
using System.IO.IsolatedStorage;
using System.IO.Pipes;
using System.IO.Ports;
using System.Linq.Expressions;
using System.Linq;
using System.Management.Instrumentation;
using System.Media;
using System.Net.Cache;
using System.Net.Configuration;
using System.Net.Mail;
using System.Net.Mime;
using System.Net.NetworkInformation;
using System.Net.Security;
using System.Net.Sockets;
using System.Numeric;
using System.Reflection;
using System.Reflection.Emit;
using System.Resources;
using System.Runtime;
using System.Runtime.InteropServices;
using System.Runtime.InteropServices.ComTypes;
using System.Runtime.InteropServices.Expando;
using System.Security.AccessControl;
using System.Security.Authentication;
using System.Security.Authentication.ExtendedProtection;
using System.Security.Cryptography;
using System.Security.Cryptography.X509Certificates;
using System.Security.Cryptography.Xml;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading;
using System.Timers;
using System.Web;
using System.Xml;
using System.Xml.Linq;
using System.Xml.Schema;
using System.Xml.Serialization.Advanced;
using System.Xml.Serialization.Configuration;
using System.Xml.XmlConfiguration;
using System.Xml.XPath;
using System.Xml.Xsl;

'#else
using System;
using System.Collections.Generic;
'#endif

namespace ConsoleApplication1
{
class Hoge
{
List<string> strList = null;

public Hoge()
{
this.strList = new List<string>();
this.strList.Add("A");
this.strList.Add("VVV");
}

public void Add(string str)
{
this.strList.Add(str);
}
}

class Program
{
static void Main(string[] args)
{
Hoge hoge = new Hoge();
}
}
}

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/09/10 02:55

    お早い回答ありがとうございます。
    サイズ自体は変わらないのですね。

    とても参考になります。

    キャンセル

0

名前が被る可能性が高くなるでしょう。
たとえば、Fileと書けば、System.IO.Fileのことだと思うかもしれませんが、MVCならSystem.Web.Mvc.Controller.Fileを指していたりします。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

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

  • ただいまの回答率 90.98%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

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

  • C#

    5791questions

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