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

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

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

XMLは仕様の1つで、マークアップ言語群を構築するために使われています。

C#

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

Q&A

解決済

1回答

2508閲覧

【C#】XDocument.Load使用時、newが不要の理由

k_mail

総合スコア90

XML

XMLは仕様の1つで、マークアップ言語群を構築するために使われています。

C#

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

0グッド

0クリップ

投稿2019/01/03 01:30

編集2019/01/03 01:31

XDocumentクラスの使い方について質問です。
下記は、「実戦で役立つ C#プログラミングのイディオム/定石&パターン」からの抜粋になります。
1行目の
var xdoc = XDocument.Load("novelists.xml");
についてですが、なぜ、
var xdoc = new XDocument.Load("novelists.xml");
のように「new」が不要で使用可能なのでしょうか。

XDocument(クラス)にカーソルを当て、F12で定義に飛んでみたのですが、
staticのようなものもついていないように見えます。
初歩的な質問で申し訳ありませんが、
宜しくお願い致します。

C#

1 2using System.Xml.Linq; 3 4 var xdoc = XDocument.Load("novelists.xml"); 5 var xelements = xdoc.Root.Elements(); 6 foreach (var xnovelist in xelements) { 7 XElement xname = xnovelist.Element("name"); 8 Console.WriteLine(xname.Value);

xmlファイル

novelists

1<?xml version="1.0" encoding="utf-8"?> 2<!-- List 11-1 --> 3<novelists> 4 <novelist> 5 <name kana="なつめ そうせき">夏目 漱石</name> 6 <birth>1867-02-09</birth> 7 <death>1916-12-09</death> 8 <masterpieces> 9 <title>吾輩は猫である</title> 10 <title>坊っちゃん</title> 11 <title>こゝろ</title> 12 </masterpieces> 13 </novelist> 14 <novelist> 15 <name kana="かわばた やすなり">川端 康成</name> 16 <birth>1899-06-14</birth> 17 <death>1972-04-16</death> 18 <masterpieces> 19 <title>雪国</title> 20 <title>伊豆の踊子</title> 21 </masterpieces> 22 </novelist> 23 <novelist> 24 <name kana="だざい おさむ">太宰 治</name> 25 <birth>1909-06-19</birth> 26 <death>1948-06-13</death> 27 <masterpieces> 28 <title>斜陽</title> 29 <title>人間失格</title> 30 </masterpieces> 31 </novelist> 32 <novelist> 33 <name kana="みやざわ けんじ">宮沢 賢治</name> 34 <birth>1896-08-27</birth> 35 <death>1933-09-21</death> 36 <masterpieces> 37 <title>銀河鉄道の夜</title> 38 <title>風の又三郎</title> 39 </masterpieces> 40 </novelist> 41</novelists> 42

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

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

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

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

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

guest

回答1

0

ベストアンサー

XDocumentのソースを見ますと、Loadはstaticで宣言されています。
この為、newでインスタンスを作成する必要がありません。

投稿2019/01/03 01:49

編集2019/01/03 01:50
YAmaGNZ

総合スコア10242

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

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

k_mail

2019/01/03 02:05

ご回答ありがとうございます。 >XDocumentのソースを見ますと、Loadはstaticで宣言されています。 ⇒そうなんですね。  メソッドがstatic宣言されていると、newは不要なんですね。。。  そうなると、Rootメソッド?(プロパティ?)の定義に飛ぶと、  public XElement Root { get; }  となっており、Root を使用するためには、newしないといけないような気がしますが、  これは、なぜnewが不要なのでしょうか。  staticですでに読み込んだものを引き続き利用するからという理解だと  少し納得できないです。。。
k_mail

2019/01/03 02:07

添付頂いたURLの5512行目に当たるでしょうか。
YAmaGNZ

2019/01/03 02:13

var xdoc = XDocument.Load("novelists.xml"); にて、XDocumentクラスのインスタンスが生成されて、xdocに格納されます。 5710行目からの実際のLoadの実装部分を見ますと、この中でXDocumentがnewされています。
k_mail

2019/01/03 02:27

・クラスはstaticになっていないが、クラス内のメソッドがstatic宣言していれば、  newしなくてもメソッドは使用可能 ・staticメソッド内でクラスをインスタンス化(5713行目)する、  通常と逆の手順もありえる ということでしょうか。 勉強になりました。 ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問