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

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

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

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

Q&A

3回答

1549閲覧

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

退会済みユーザー

退会済みユーザー

総合スコア0

C#

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

0グッド

0クリップ

投稿2017/09/09 16:56

編集2017/09/09 17:59

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

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

C#

1class Hoge 2{ 3 List<string> strList = null; 4 5 public Hoge() 6 { 7 this.strList = new List<string>(); 8 this.strList.Add("A"); 9 this.strList.Add("VVV"); 10 } 11 12 public void Add(string str) 13 { 14 this.strList.Add(str); 15 } 16}

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

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

よろしくお願いします。

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

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

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

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

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

guest

回答3

0

質問への回答

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/10 07:27

編集2017/09/11 03:10
aglkjggg

総合スコア769

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

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

退会済みユーザー

退会済みユーザー

2017/09/10 15:06

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

0

以下試してみましたが、アプリケーションのサイズは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/09 17:50

Ineda

総合スコア45

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

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

退会済みユーザー

退会済みユーザー

2017/09/09 17:55

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

0

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

投稿2017/09/11 01:29

x_x

総合スコア13749

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

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

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問