<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>OOP on 又LAG隨性筆記</title><link>https://www.lagagain.com/tags/oop/</link><description>Recent content in OOP on 又LAG隨性筆記</description><generator>Hugo -- gohugo.io</generator><language>zh-TW</language><lastBuildDate>Tue, 03 Dec 2019 08:14:18 +0800</lastBuildDate><atom:link href="https://www.lagagain.com/tags/oop/index.xml" rel="self" type="application/rss+xml"/><item><title>關於C#內建類型的怪異設計(LeetCode:reverse string)</title><link>https://www.lagagain.com/post/%E9%97%9C%E6%96%BCcsharp%E5%85%A7%E5%BB%BA%E9%A1%9E%E5%9E%8B%E7%9A%84%E6%80%AA%E7%95%B0%E8%A8%AD%E8%A8%88/</link><pubDate>Tue, 03 Dec 2019 08:14:18 +0800</pubDate><guid>https://www.lagagain.com/post/%E9%97%9C%E6%96%BCcsharp%E5%85%A7%E5%BB%BA%E9%A1%9E%E5%9E%8B%E7%9A%84%E6%80%AA%E7%95%B0%E8%A8%AD%E8%A8%88/</guid><description>&lt;h1 id="前言">前言&lt;/h1>
&lt;p>先說一下我的背景，可能會比較了解為什麼我會這樣想。我自己學過C++和Java，這兩個都不算是完全物件導向。相對來說，另外一個蠻愛使用的Python就連基本型態也是物件。至於C#，因為一些個人喜好的因素，並沒有去好好學習。不過也有好一段時間幫朋友除錯，除ASP.NET的錯誤。&lt;/p>
&lt;p>之所以能夠幫忙，或快速上手，應該也與C++、Java、C#三者的歷史有關。在C++之後，推出了一個更物件導向的程式語言：Java，最基礎的單獨單位是&lt;code>class&lt;/code>，並且在JVM上運行，號稱可以跨平台、跨設備；隨後，Microsoft為了與Java競爭，並推廣自家的.Net Framework，學習了Java的設計，推出了C#。(早期更是有&lt;a href="https://zh.wikipedia.org/wiki/J%E2%99%AF">J#&lt;/a>)&lt;/p>
&lt;h1 id="基礎型別基礎類別">基礎型別&amp;amp;基礎類別&lt;/h1>
&lt;p>所以，三個是很相像的，更重要的是在物件導向的概念上。所以會一個，基本上另外兩個也就應該容易上手。不過C++從C遺留下來的基礎型態&lt;code>int&lt;/code>、&lt;code>char&lt;/code>、&lt;code>float&lt;/code>以及&lt;code>struct&lt;/code>等等，註定讓它不那麼物件。Java可能也有類似歷史因素，而為了處理這樣問題，Java將所有基礎型態做了包裝，一一對應&lt;sup id="fnref:1">&lt;a href="#fn:1" class="footnote-ref" role="doc-noteref">1&lt;/a>&lt;/sup>。&lt;/p>
&lt;p>&lt;img src="https://i.postimg.cc/4Ny4LVSg/Wrapper-Class.png" alt="Java基本型態對應的類別">
&lt;em>※ Java基本型態對應的類別&lt;/em>&lt;/p>
&lt;blockquote>
&lt;p>Java中有兩個型態系統，基本型態與類別型態，使用基本型態目的在於效率，然而更多時候，會使用類別建立實例，因為物件本身可以攜帶更多資訊，如果要讓基本型態像物件一樣操作，可以使用Long、Integer、Double、Float、Boolean、Byte等類別來包裹（Wrap）基本型態。
&amp;ndash;Source: &lt;a href="https://openhome.cc/Gossip/Java/Wrapper.html">https://openhome.cc/Gossip/Java/Wrapper.html&lt;/a>&lt;/p>
&lt;/blockquote>
&lt;h1 id="為什麼會突然覺得c設計的有點怪">為什麼會突然覺得C#設計的有點怪？&lt;/h1>
&lt;p>這主要是最近寫到一題&lt;a href="https://leetcode.com/problems/reverse-string/">LeetCode&lt;/a>，要做字元陣列的反轉。如果使用C#的話，需要使用&lt;a href="https://docs.microsoft.com/en-us/dotnet/api/system.array.reverse?view=netframework-4.8">Array的類別方法&lt;/a>。&lt;/p>
&lt;div class="highlight">&lt;pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4">&lt;code class="language-c#" data-lang="c#">&lt;span style="color:#66d9ef">public&lt;/span> &lt;span style="color:#66d9ef">class&lt;/span> &lt;span style="color:#a6e22e">Solution&lt;/span> {
&lt;span style="color:#66d9ef">public&lt;/span> &lt;span style="color:#66d9ef">void&lt;/span> ReverseString(&lt;span style="color:#66d9ef">char&lt;/span>[] s) {
Array.Reverse(s)
}
}
&lt;/code>&lt;/pre>&lt;/div></description></item></channel></rss>