オブジェクト指å‘: プãƒãƒ‘ティ・メソッド
目次
プãƒãƒ‘ティ
アクセサ
メンãƒå¤‰æ•°(インスタンス変数)ã«å¤–部ã‹ã‚‰ã‚¢ã‚¯ã‚»ã‚¹ã™ã¤ç‚ºã®ãƒ¡ã‚½ãƒƒãƒ‰
get(set)アクセサã€getter(setter)ã¨å‘¼ã°ã‚Œã‚‹ã€‚
 private int _member1;
 public int member1
 {
  //getアクセサ
  get { return this._member1; }
  //setアクセサ
  valueã¯å®£è¨€ä¸è¦
  set { _member1 = value; }
 }
 //↑ã®çœç•¥å½¢
 public int member2 { get; set; }
 public void SubRoutin1(){
  ~
 }
}
public void main()
{
 clsParent myParent = new clsParent();
 myParent.member1 = 5;
 int x = myParent.member1;
 myParent.member2 = 10;
 int y = myParent.member2;
 myParent.SubRoutin1();
}
{
private:
  int _member;
public:
  int GetMember();
  void SetMember(int member);
};
int MyClass::GetMember()
{
  return this->_member;
}
void MyClass::SetMember(int member)
{
  this->_member = member;
}
int main(array<System::String ^> ^args)
{
  MyClass *myClass = new MyClass();
  myClass->SetMember(10);
  Console::WriteLine(myClass->GetMember());
  // →10
  delete myClass;
  
return 0;
}
※Getter/Setterã‚’åŒåã§ã‚ªãƒ¼ãƒãƒ¼ãƒãƒ¼ãƒ‰ã™ã‚‹ã¨å‘¼ã³å‡ºã—å´ã‹ã‚‰ã¯ä½¿ã„ã‚„ã™ããªã‚‹ã€‚
「オーãƒãƒ¼ãƒãƒ¼ãƒ‰ã€å‚ç…§
 Dim _Menber As Integer
 
 Public Property Menber As Integer
  ‘getアクセサ
  Get
   Return _Member
  End Get
  ‘setアクセサ
  Set(ByVal prm As String)
   _Member = prm
  End Set
 End Property
 
 Public Sub SubRoutine()
  ~
 End Sub
End Class
Dim myTest As New clsTest()
myTest.Member = 10
Dim x As Integer = myTest.Member
Call myTest.SubRoutine()
※MyClass.cls
Dim pMyVal As Integer
Dim pMyObj As Object
‘å‚ç…§(èªã¿å–り)専用:データ型
Public Property Get Getter() As Integer
  Getter = pMyVal
End Property
‘å‚ç…§(èªã¿å–り)専用:オブジェクト型
Public Property Get Getter() As Object
  Set Getter = pMyVal
End Property
‘è¨å®š(書ãè¾¼ã¿)専用:データ型
Public Property Let Letter(ByVal prm As Integer)
  pMyVal = prm
  ※æ£ç¢ºã«ã¯â†“ ã®æ§˜ã«æ›¸ããŒã€ŒLetã€ã¯çœç•¥å¯èƒ½ã€‚
  Let pMyVal = prm
End Property
‘è¨å®š(書ãè¾¼ã¿)専用:オブジェクト型
Public Property Set Setter(ByVal prm As Object)
  Set pMyObj = prm
End Property
‘イニシャライザー
Private Sub Class_Initialize()
  Call MsgBox("Initialize()")
End Sub
‘ファイナライザー
Private Sub Class_Terminate()
  Call MsgBox("Terminate()")
End Sub
※呼ã³å‡ºã—å…ƒ
Private Sub Form_Load()
  Dim myClass As myClass
  Set myClass = New myClass
  
  myClass.Letter = 5
  Let myClass.Letter = 5
  
  Dim myObj As Object
  Set myClass.Setter = myObj
  
  Debug.Print (myClass.Getter)
  
  Set myClass = Nothing
End Sub
 private int _member1;
 public int member1
 {
  //getter
  get { return this._member1; }
  //setter
  valueã¯å®£è¨€ä¸è¦
  set { _member1 = value; }
 }
 public void SubRoutin1(){
  ~
 }
}
public void main()
{
 clsParent myParent = new clsParent();
 myParent.member1 = 5;
 int x = myParent.member1;
 myParent.member2 = 10;
 int y = myParent.member2;
 myParent.SubRoutin1();
}
 this.member1 = prm1;
 this.member2 = prm2;
}
var number = new Calc1(1, 2);
var x = number.member1 + number.member2;
⇒ x : 3
number.member1 = 10;
number.member2 = 20;
var y = number.member1 + number.member2;
⇒ x : 30
var Calc2 = function(prm1, prm2){
 this.member1 = prm1;
 this.member2 = prm2;
};
var number = new Calc2(100, 200);
var x = number.member1 + number.member2;
⇒ x : 300
number.member1 = 1000;
number.number2 = 2000;
var y = number.member1 + number.member2;
⇒ y : 3000
$p->SetMyVal("aaa");
$val = $p->GetMyVal
$val:aaa
class MyClass{
 private $_myVal;
 
 function SetMyVal($prm)
 {
  $this->_myVal = $prm;
 }
 function GetMyVal()
 {
  return $this->_myVal;
 }
}
èªã¿å–り・書ãè¾¼ã¿å°‚用属性
int _member;
public int member{ get; }
int _member;
public int member{ set;}
宣言時ã€ã‚³ãƒ³ã‚¹ãƒˆãƒ©ã‚¯ã‚¿ã§ã®ã¿è¨å®šå¯èƒ½ãªã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹å¤‰æ•°
(固定値(const)ã¨é•ã„ã€ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹æ¯Žã«å€¤ã‚’変ãˆã‚‰ã‚Œã‚‹)
public class Test
{
  private readonly int member = 5;
  public Test(int init)
  {
    this.member = init;
  }
  
  public int Member
  {
    get { return this.member; }
    ⇒ OK
    set { this.member = value; }
    ⇒ ビルドエラー
  }
}
 Public ReadOnly Property Menber As Integer
  Get
   Return _Member
  End Get
 End Property
 
 Dim _Menber As Integer
 Public WriteOnly Property Menber As Integer
  Set(ByVal prm As String)
   _Member = prm
  End Set
 End Property
インデクサ
※インスタンス自身をプãƒãƒ‘ティã¨ã—ã¦æ‰±ã†
public class MyList<T>
{
  T[] _list = new T[1000];
  public T this[int index]
  {
    get { return _list[index]; }
    set { _list[index] = value; }
  }
}
public void Form1_Load(object sender, EventArgs e)
{
  MyList<int> myList = new MyList<int>();
  
  for (var i = 0; i < 10; i++)
  {
    myList[i] = i;
    ※インスタンスをプãƒãƒ‘ティã¨ã—ã¦æ‰±ã£ã¦ã„ã‚‹
  }
}
Public Class MyList(Of T)
  Dim _list(1000) As T
  
  //デフォルトã®ãƒ—ãƒãƒ‘ティを宣言
  Default Public Property list(ByVal index As Integer) As T
    Get
      Return _list(index)
    End Get
    Set(value As T)
      _list(index) = value
    End Set
  End Property
  
End Class
Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
  
  Dim myList As New MyList(Of Integer)
  
  For i As Integer = 0 To 10 Step 1
    myList(i) = i
    ※インスタンスをプãƒãƒ‘ティã¨ã—ã¦æ‰±ã£ã¦ã„ã‚‹
  Next i
  
End Sub
メソッド
クラス内サブルーãƒãƒ³
public宣言ã™ã‚‹äº‹ã§ã‚¯ãƒ©ã‚¹å¤–部ã‹ã‚‰å‘¼ã°ã›ã‚‹äº‹ãŒå¯èƒ½ã€‚
{
 private int member;
 public void SubRoutine(int prm1, int prm2)
 { this.member = prm1 + prm2; }
}
public void main()
{
  Parent p = new Parent();
  p.SubRoutine(prm1:5, prm2:10);
}
class MyClass
{
private:
  int ~;
public:
  void sayMember(){
    ~
  }
};
// 外部宣言
class MyClass
{
private:
  int ~;
public:
  // プãƒãƒˆã‚¿ã‚¤ãƒ—宣言
  void sayMember();
};
void MyClass::sayMember()
{
  ~;
}
int main(array<System::String ^> ^args)
{
ã€€ã€€ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹ã‚’ã‚¹ã‚¿ãƒƒã‚¯é ˜åŸŸã«ä½œæˆ
  MyClass myClass
  myClass.sayMember();
  
ã€€ã€€ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹ã‚’ãƒ’ãƒ¼ãƒ—é ˜åŸŸã«ä½œæˆ
  MyClass *myClass = new MyClass();
  myClass->sayMember();
  delete myClass
  
  return 0;
}
â€»ã‚¹ã‚¿ãƒƒã‚¯é ˜åŸŸ/ãƒ’ãƒ¼ãƒ—é ˜åŸŸã«ã¤ã„ã¦ã¯ã€ã€Œãƒ¡ãƒ¢ãƒªç®¡ç†/ãƒ’ãƒ¼ãƒ—é ˜åŸŸã€å‚ç…§
 Private member As Integer
 Public Sub SubRoutine(
   ByVal prm1 As Integer, _
   ByVal prm2 As Integer)
   me.member = prm1 + prm2
 End Sub
End Class
Public Sub Main()
  Dim p As New Parent()
  p.SubRoutine(prm1:=5, prm2:=10)
End Sub
  this.answer;
  this.add = function(prm1, prm2){
    this.answer = prm1 + prm2;
  };
};
$p->Method();
aaa
class MyClass{
 function Method(){
  print("aaa");
 }
}
オーãƒãƒ¼ãƒãƒ¼ãƒ‰
多é‡å®šç¾©
引数・戻り値ã®ç•°ãªã‚‹åŒåã®ãƒ¡ã‚½ãƒƒãƒ‰ã‚’定義ã™ã‚‹äº‹ã€‚
ä¼¼ãŸæ©Ÿèƒ½ã‚’åŒåã«ã™ã‚‹äº‹ã§ç›´æ„Ÿçš„ã«ä½¿ã„ã‚„ã™ããªã‚‹ã€‚
è¨è¨ˆæ™‚ã«ã¯åå‰è¡çªã‚‚èµ·ã“り難ã„。
{
 public int member{ get; set; }
 
 public void SubRoutine(int prm1, int prm2)
 { this.member = prm1 + prm2; }
 
 //オーãƒãƒ¼ãƒãƒ¼ãƒ‰(引数ãŒé•ã†)
 public void SubRoutine()
 { Console.WriteLine(this.member); }
 
 //オーãƒãƒ¼ãƒãƒ¼ãƒ‰(戻り値ãŒé•ã†)
 ※引数も変ãˆã‚‹å¿…è¦ã‚り
 public int SubRoutine(int prm1, int prm2, int prm3)
 {
  return prm1 + prm2 + prm3;
 }
}
※Getter/Setterã‚’åŒåã§ã‚ªãƒ¼ãƒãƒ¼ãƒãƒ¼ãƒ‰ã—ãŸä¾‹
class MyClass
{
private:
  int _member;
public:
  int Member();
  void Member(int member);
};
int MyClass::Member()
{
  return this->_member;
}
void MyClass::Member(int member)
{
  this->_member = member;
}
int main(array<System::String ^> ^args)
{
  MyClass *myClass = new MyClass();
  myClass->Member(10);
  Console::WriteLine(myClass->Member());
  // →10
  delete myClass;
  return 0;
}
 Private member As Integer
 Public Sub SubRoutine(
   ByVal prm1 As Integer, _
   ByVal prm2 As Integer)
   me.member = prm1 + prm2
 End Sub
 
 ’オーãƒãƒ¼ãƒãƒ¼ãƒ‰(引数ãŒé•ã†)
 Public Overloads Sub SubRoutine()
  Console.WriteLine(me.member)
 End Sub
 
 ’オーãƒãƒ¼ãƒãƒ¼ãƒ‰(引数ãŒé•ã†)
 ※引数も変ãˆã‚‹å¿…è¦ã‚り
 Public Overloads Function SubRoutine(
   ByVal prm1 As Integer, _
   ByVal prm2 As Integer, _
   ByVal prm3 As Integer) As Integer
  Return prm1 + prm2 + prm3
 End Sub
End Class
{
 private int member;
 
 public void SubRoutine(int prm1, int prm2)
 { this.member = prm1 + prm2; }
 
 //オーãƒãƒ¼ãƒãƒ¼ãƒ‰(引数ãŒé•ã†)
 public void SubRoutine()
 { Console.WriteLine(this.member); }
 
 //オーãƒãƒ¼ãƒãƒ¼ãƒ‰(戻り値ãŒé•ã†)
 ※引数も変ãˆã‚‹å¿…è¦ã‚り
 public int SubRoutine(int prm1, int prm2, int prm3)
 {
  return prm1 + prm2 + prm3;
 }
}
  this.answer;
  this.add = function(prm1, prm2){
    this.answer = prm1 + prm2;
  };
};
var Child = function(){};
//継承
Child.prototype = new Parent();
Child.prototype.minus = function(prm){
  this.answer -= prm;
};
var child = new Child();
child.add(1,1);
child.minus(1);
⇒this.answer = 1
演算åã®ã‚ªãƒ¼ãƒãƒ¼ãƒãƒ¼ãƒ‰
{
 int x, y;
 
 public MyClass() { x = y = 0; }
 public MyClass(int i, int j) { x = i; y = j; }
 
 public static MyClass operator +(MyClass prm1, MyClass prm2)
 {
  MyClass result = new MyClass();
  
  result.x = prm1.x + prm2.x;
  result.y = prm1.y + prm2.y;
  
  return result;
 }
}
class Program
{
 static void Main(string[] args)
 {
  MyClass a = new MyClass(1, 1);
  MyClass b = new MyClass(10, 10);
  MyClass c = new MyClass();
  c = a + b;
  c.x:11 c.y:11
  +ã¯MyClassã¨MyClassã®å€¤ãŒè¶³ã•れã¦ã„ã‚‹
 }
}
class MyClass
{
 int x, y;
 
 public MyClass() { x = y = 0; }
 public MyClass(int i, int j) { x = i; y = j; }
 
 public static MyClass operator +(MyClass prmObj, int prmInt)
 {
  MyClass result = new MyClass();
  
  result.x = prmObj.x + prmInt;
  result.y = prmObj.y + prmInt;
  
  return result;
 }
}
class Program
{
 static void Main(string[] args)
 {
  MyClass a = new MyClass(1, 1);
  MyClass result = new MyClass();
  
  result = a + 5;
  result.x:6 result.y:6
  +ã¯MyClassã¨intã®å€¤ãŒè¶³ã•れã¦ã„ã‚‹
 }
}
{
private:
 int myInt1;
 int myInt2;
public:
 MyClass(int prm1, int prm2);
 void Show();
 MyClass operator+(MyClass obj);
};
MyClass::MyClass(int prm1 = 0, int prm2 = 0)
{
 this->myInt1 = prm1;
 this->myInt2 = prm2;
};
void MyClass::Show()
{
 cout << "myInt1:" << this->myInt1 << endl;
 cout << "myInt2:" << this->myInt2 << endl;
}
MyClass MyClass::operator+(MyClass obj)
{
 MyClass m;
 m.myInt1 = this->myInt1 + obj.myInt1;
 b.myInt1 + c.myInt2
 m.myInt2 = this->myInt2 + obj.myInt2;
 b.myInt2 + c.myInt2
 return m;
ã€€çµæžœã‚’a.myInt1ã€a.myInt2ã«æ ¼ç´
 インスタンス:mã¯ã“ã“ã§ç ´æ£„ã•れる
}
int _tmain(int argc, _TCHAR* argv[])
{
 MyClass a(0, 0);
 MyClass b(10, 20);
 MyClass c(50, 60);
 a = b + c;
 オーãƒãƒ¼ãƒãƒ¼ãƒ‰ã—ãŸ+を利用
 bã®+関数ã¸cを渡ã—ã€çµæžœã‚’aã«æ ¼ç´ã™ã‚‹
 a = b.+(c)
 a.Show();
 →myInt1:60 myInt2:80
 return 0;
}
クラス外ã«ã‚ªãƒ¼ãƒãƒ¼ãƒãƒ¼ãƒ‰æ¼”ç®—åを定義
パターン1
class MyClass
{
private:
 int myInt;
public:
 MyClass(int prm){ this->myInt = prm; };
 int Getter(){ return this->myInt; }
};
通常ã®ï¼‹æ¼”ç®—åをオーãƒãƒ¼ãƒãƒ¼ãƒ‰
MyClass operator+(int prmI, MyClass prmM)
{
 return MyClass(prmI + prmM.Getter());
}
int _tmain(int argc, _TCHAR* argv[])
{
 MyClass a(0);
 MyClass b(100);
 
 a = 1000 + b;
 オーãƒãƒ¼ãƒãƒ¼ãƒ‰ï¼‹ã«å¼•æ•°1000ã¨bインスタンスを渡ã—ã€çµæžœã‚’aã«æ ¼ç´
 (ãªãœã‹)左崿•°å€¤ãŒç¬¬ä¸€å¼•æ•°ã€å³å´ã‚ªãƒ–ジェクトãŒç¬¬äºŒå¼•æ•°
 →a.myInt:1100
 return 0;
}
パターン2
MyClass operator+(MyClass m1, MyClass m2)
{
 return MyClass(m1.Getter() + m2.Getter());
}
int _tmain(int argc, _TCHAR* argv[])
{
 MyClass a(0);
 MyClass b(100);
 MyClass c(100);
 
 a = b + c;
 オーãƒãƒ¼ãƒãƒ¼ãƒ‰ï¼‹ã«å¼•数:aインスタンスã¨bインスタンスを渡ã—ã€çµæžœã‚’aã«æ ¼ç´
 (ãªãœã‹)左崿•°å€¤ãŒç¬¬ä¸€å¼•æ•°ã€å³å´ã‚ªãƒ–ジェクトãŒç¬¬äºŒå¼•æ•°
 →a.myInt:200
 
 return 0;
}
メンãƒãƒ¼ã®è¿½åŠ (JS)
var MyClass = function(){};
MyClass = function(){
 this.member1;
};
MyClass = function(){
 this.add1 = function(){
  this.member1 += 1;
 };
};
var myclass = new MyClass();
myclass.member1 = 5;
myclass.add1();
// ⇒ myclass.member1 = 6;
//インスタンスã«å¯¾ã—ã¦ãƒ¡ãƒ³ãƒãƒ¼è¿½åŠ
member.Minus = function(){
 return this.member1 – this.member2;
};
number.Minus();
⇒-1000;
var newMember = new Calc2();
newMember.Minus();
//↑ 未定義エラー
ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹ä½œæˆæ™‚ã®ãƒ¡ã‚½ãƒƒãƒ‰ã®ã‚³ãƒ”ー
 全ãåŒã˜æŒ™å‹•ã‚’ã™ã‚‹ãƒ¡ã‚½ãƒƒãƒ‰ã‚’全インスタンスã«ã‚³ãƒ”ーã™ã‚‹ã®ã¯ãƒ¡ãƒ¢ãƒªã®ç„¡é§„。
 ãã®ç‚ºã€ä¾‹ãˆã°Webシステム用言語JavaScriptã§ã¯prototypeç‰ã‚’用ã„ã¦ãƒ¡ã‚½ãƒƒãƒ‰ã®ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹ã¸ã®ã‚³ãƒ”ーをçœç•¥ã™ã‚‹ä»•様をæŒã¤ã€‚
 ã—ã‹ã—C#ã§ã¯ãƒ¡ã‚½ãƒƒãƒ‰ã¯ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹ã«ã‚³ãƒ”ーã•れãšã€ã‚¯ãƒ©ã‚¹ã‚’å‚ç…§ã™ã‚‹ç‚ºã®ãƒã‚¤ãƒ³ã‚¿ãŒã‚³ãƒ”ーã•れるã®ã¿ã€‚
 クラスã®ã‚³ãƒ”ー(インスタンス作æˆ)ã®éš›ã®ã€ãƒ¡ã‚½ãƒƒãƒ‰ã«é–¢ã™ã‚‹ãƒ¡ãƒ¢ãƒªåˆ¶å¾¡ã‚’考慮ã™ã‚‹å¿…è¦ã¯ãªã„。
※プãƒãƒ‘ティã¯ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹æ¯Žã«ç•°ãªã‚‹å€¤ã‚’æŒãŸã›ã‚‹æ„味ã¯ã‚ã‚‹ãŒã€
 全ãåŒã˜æŒ™å‹•ã‚’ã™ã‚‹ãƒ¡ã‚½ãƒƒãƒ‰ã‚’全インスタンスã«ã‚³ãƒ”ーã™ã‚‹ã®ã¯ãƒ¡ãƒ¢ãƒªã®ç„¡é§„。
 ブラウザã®èªã¿è¾¼ã¿æ¯Žã«ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹ã‚’作æˆã™ã‚‹WEBシステムã®ç‰¹æ€§ã‚’考慮ã—ã€
 メソッドã«ã¤ã„ã¦ã¯é€šå¸¸ã€ä»¥ä¸‹ã®æ©Ÿèƒ½ã‚’用ã„ã¦ãƒ¡ãƒ¢ãƒªãƒ¼ã‚³ãƒ”ーを行ã‚ã›ãªã„。
MyClass.prototype.plus10 = function(number){
 this.member1 += 10;
 this.member2 += 10;
}
var myclass = new MyClass()
myclass.plus10()
//プãƒãƒˆã‚¿ã‚¤ãƒ—定義ã®åˆ¥ã®æ›¸ãæ–¹
MyClass.prototype = {
 this.plus10 = function(number){
  this.member1 += 10;
  this.member2 += 10;
 }
}